繁体   English   中英

Eclipse:导入时使用双分号

[英]Eclipse: Double semi-colon on an import

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

例子:

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

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

完全公开......我正在使用 SpringSource Tool Suite 2.8.0。

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

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

例如,单一类型导入:

SingleTypeImportDeclaration:
   import TypeName ;

在 JLS 对语法的描述中,没有允许空导入语句的歧义,并且除了包之外,没有其他东西可以进入编译单元的前序部分。

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

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

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

您将不再在Eclipse 4.15 (2020.03) 中看到这一点:

导入完成后不再有虚假的分号

大约 18 年前,据报道,如果已经存在(例如更改现有导入),则完成导入会添加一个不必要的分号。

现在不再插入这个额外的分号。

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

您可能将 Eclipse 警告设置得非常严格。 我喜欢我的那样。 您最好的方法是设置一些编码标准并使用 Checkstyle 和/或 Findbugs 之类的东西来强制执行它们。 至少其中一个会发现并扇你同事的手腕!

编辑

无论您的“空语句”设置如何,Eclipse(至少 3.6,我没有测试 3.7)确实在 import 语句之后将双分号报告为编译错误。 Eclipse 有自己的内置编译器,独立于 JDK 编译器。 因此,如果 Eclipse 不喜欢这个,但 JDK 编译器喜欢,它表明其中一个或另一个有错误(或至少对 JLS 有不同的解释!)。

我建议将此作为针对 Eclipse 的错误提出 - 纯粹是因为他们在调查事情和解释为什么他们认为他们是正确的以及向 JDK 开发人员提出/追查错误报告时往往非常敏感。

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

但我没有尝试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM