Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse:导入时使用双分号_Java_Eclipse_Import_Syntax Error - Fatal编程技术网

Java Eclipse:导入时使用双分号

Java Eclipse:导入时使用双分号,java,eclipse,import,syntax-error,Java,Eclipse,Import,Syntax Error,使用Eclipse时,如果在导入行(不是最后一个导入行)上有一个额外的分号,我会在IDE中看到一个语法错误。但是,这在IDE之外可以很好地编译(在本例中是Maven) 例如: import java.util.ArrayList;; //notice extra semicolon import java.util.List; 还有其他人看到这种行为吗?为什么这会显示为语法错误?我和一个一直把这些推到源代码管理的人一起工作,这让我很恼火(他们显然没有使用Eclipse) 全面披露。。。我正在使

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

例如:

import java.util.ArrayList;; //notice extra semicolon
import java.util.List;
还有其他人看到这种行为吗?为什么这会显示为语法错误?我和一个一直把这些推到源代码管理的人一起工作,这让我很恼火(他们显然没有使用Eclipse)


全面披露。。。我正在使用SpringSource工具套件2.8.0。

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

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

编辑

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


我建议将此作为针对Eclipse的bug提出—纯粹是因为他们在调查事情、解释他们认为自己是对的原因以及向JDK开发人员提出/追踪bug报告时往往反应非常迅速。

Eclipse作为IDE具有识别潜在代码删除的功能/选项,因此会将其标记为错误

我认为这可以在java->compiler->preferences下设置。请查看此链接


但是我没有试过。

这是一个语法错误,因为导入是一个声明,而不是一个语句;在类之外不能有语句

有关详细信息,请参见,但本质上,导入声明以单个
结尾

例如,单一类型导入:

SingleTypeImportDeclaration:
   import TypeName ;
在JLS对语法的描述中,不存在允许使用空import语句的歧义,并且除了包之外,编译单元的premable中没有其他内容

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

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

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

您将不再看到以下内容:

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

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


据我所知,Eclipse将其报告为编译错误。它说:令牌“;”上的语法错误已验证。如果我尝试运行我得到的“线程中的异常”main“java.lang.Error:未解决的编译问题”,正如我所说的,您可能已经将空语句设置为Error。您报告的异常不会添加更多信息。Eclipse可以尝试运行未编译的代码——例如,即使不相关的类未编译,您也可以在类上运行单元测试。这个异常告诉您的是,您试图运行的代码中有一个“编译错误”。但是,正如我所说的,我怀疑“编译错误”是由Eclipse发明的,因为它设置得太严格了——比JLS更严格。“空语句”设置为忽略。正如我所说的,这在最后一条进口线上是可以的。在任何其他代码上也可以。在Java->Compiler->Errors/Warnings中,没有任何设置为“Error”。Eclipse发出错误信号是正确的。JDK接受它是不正确的:我知道。我的问题是为什么Eclipse会被这个问题扼杀。更新了我的答案,我首先错过了Eclipse部分。关于这些类的快速注释要快速修复它们,请使用键盘快捷键ctrl+shift+o这将修复当前打开的java文件的所有导入o,你是在告诉我JDK错误,而不是一次升级?Sheesh@smp7d我是这么说的,但这是正确的。不管它是否是一个bug;无聊的。FWIW,是稍微相关的。您在哪个平台上?java版本“1.6.0_25”java(TM)SE运行时环境(build 1.6.0_25-b06)java HotSpot(TM)64位服务器虚拟机(build 20.0-b11,混合模式),Windows 7 Pro SP1这被认为是JDK错误:javac不应该在该位置接受simiclon,Eclipse拒绝它是正确的。看见