使用Eclipse,如果我在导入行(而不是最后一个导入行)上有一个额外的分号,我会在IDE中看到语法错误。但是,这在IDE之外编译很好(在本例中为Maven)。
示例:
import java.util.ArrayList;; //notice extra semicolon
import java.util.List;
有没有其他人看到这种行为?为什么这显示为语法错误?我正在与那些不断将这些推向源代码控制的人工作,这让我感到恼火(他们显然没有使用Eclipse)。
完全披露......我正在使用SpringSource Tool Suite 2.8.0。
答案 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下设置 - >编译器 - >喜好。请看这个链接。
但我还没试过。
答案 3 :(得分:1)
您将不再通过Eclipse 4.15 (2020.03)看到此内容:
导入完成后不再出现伪分号
大约18年前,据报道,如果已经存在(例如更改现有的进口商品时),完成进口会添加不必要的分号。
现在不再插入此多余的分号。