Eclipse:导入时使用双分号

时间:2011-11-14 17:28:38

标签: java eclipse import syntax-error

使用Eclipse,如果我在导入行(而不是最后一个导入行)上有一个额外的分号,我会在IDE中看到语法错误。但是,这在IDE之外编译很好(在本例中为Maven)。

示例:

import java.util.ArrayList;; //notice extra semicolon
import java.util.List;

有没有其他人看到这种行为?为什么这显示为语法错误?我正在与那些不断将这些推向源代码控制的人工作,这让我感到恼火(他们显然没有使用Eclipse)。

完全披露......我正在使用SpringSource Tool Suite 2.8.0。

4 个答案:

答案 0 :(得分:3)

这是语法错误,因为import是声明,而不是声明;你不能在课堂外发表言论。

有关详细信息,请参阅JLS 7.5,但实际上,导入声明以单个;结尾。

例如,单一类型导入:

SingleTypeImportDeclaration:
   import TypeName ;

在JLS的语法描述中,没有任何歧义可以允许空的import语句,除了包之外,其他任何东西都不能用于编译单元的可编辑。

CompilationUnit:
        [[Annotations] package QualifiedIdentifier   ;  ] {ImportDeclaration}
{TypeDeclaration}

ImportDeclaration:
     import [ static] Identifier {   .   Identifier } [   .     *   ] ;

我认为这意味着Eclipse是正确的,JDK编译器不正确。

答案 1 :(得分:1)

这不是编译器错误,尽管有时它可能是错误的标志(某些代码被意外删除等)。

您的Eclipse警告设置可能非常严格。我喜欢那样的。您最好的方法是设置一些编码标准,并使用Checkstyle和/或Findbugs等方法强制执行。至少有一个人会发现并拍打你的同事的手腕!

修改

似乎Eclipse(至少3.6,我没有测试3.7)在导入语句之后确实报告了一个双分号作为编译错误,无论你的“空语句”设置如何。 Eclipse有自己的内置编译器,与JDK编译器分开。因此,如果Eclipse不喜欢这个,但JDK编译器是,它表明它们中的一个或另一个有错误(或者至少对JLS有不同的解释!)。

我建议将此作为针对Eclipse的错误 - 纯粹是因为他们在调查事物方面非常敏感,并解释为什么他们认为他们是对的,并且与JDK开发人员一起提出/追逐错误报告。

答案 2 :(得分:1)

Eclipse作为IDE具有用于识别潜在代码删除的功能/选项,从而将其标记为错误。

我认为这可以在java下设置 - >编译器 - >喜好。请看这个链接。

http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm

但我还没试过。

答案 3 :(得分:1)

您将不再通过Eclipse 4.15 (2020.03)看到此内容:

导入完成后不再出现伪分号

大约18年前,据报道,如果已经存在(例如更改现有的进口商品时),完成进口会添加不必要的分号。

现在不再插入此多余的分号。