Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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中未使用的导入?_Java_Eclipse_Coding Style_Import - Fatal编程技术网

除了减少混乱,还有什么理由清理Java中未使用的导入?

除了减少混乱,还有什么理由清理Java中未使用的导入?,java,eclipse,coding-style,import,Java,Eclipse,Coding Style,Import,有什么好的理由避免在Java中使用未使用的导入语句吗?据我所知,它们是为编译器准备的,因此大量未使用的导入不会对编译后的代码产生任何影响。这仅仅是为了减少混乱和避免命名冲突吗 (我这样问是因为Eclipse对未使用的导入给出了警告,这在我开发代码时有点烦人,因为我不想删除导入,直到我非常确定我已经完成了类的设计。)一个问题是,如果从类路径中删除导入引用的类,你不会得到一个愚蠢的、毫无用处的编译器错误。当您执行“where used”搜索时,不会出现误报 另一个(但这在本质上是非常具体的)是,如果

有什么好的理由避免在Java中使用未使用的导入语句吗?据我所知,它们是为编译器准备的,因此大量未使用的导入不会对编译后的代码产生任何影响。这仅仅是为了减少混乱和避免命名冲突吗


(我这样问是因为Eclipse对未使用的导入给出了警告,这在我开发代码时有点烦人,因为我不想删除导入,直到我非常确定我已经完成了类的设计。)

一个问题是,如果从类路径中删除导入引用的类,你不会得到一个愚蠢的、毫无用处的编译器错误。当您执行“where used”搜索时,不会出现误报

另一个(但这在本质上是非常具体的)是,如果未使用的导入与另一个导入存在命名冲突,导致您不必要地使用完全限定名

附录:今天,构建服务器开始失败编译(甚至没有测试运行),并出现内存不足错误。它一直运行良好,签入对构建过程没有任何更改,也没有任何可以解释这一点的重要添加。在尝试将内存设置(这是在64位CentOS上运行64位JVM!)增加到客户端可以编译的范围之外之后,我逐一检查了签入


开发人员使用并放弃了一个不正确的导入(他们使用该类,自动导入,然后意识到这是一个错误)。这个未使用的导入将应用程序拉入一个完整的独立层,虽然IDE没有配置为将它们分开,但构建过程是独立的。这一次导入拖入了太多的类,以至于编译器试图在类路径中没有相关的依赖库的情况下进行编译,这导致了太多问题,导致了内存不足错误。解决这个由未使用的导入引起的问题花了一个小时。

我认为如果不删除导入,就不可能出现性能问题或类似问题

但在导入列表接口等极少数情况下,可能会出现命名冲突

在Eclipse中,您始终可以使用快捷方式(取决于OS-Win:
Ctrl+SHIFT+O
和Mac:
COMMAND+SHIFT+O
)来组织导入。Eclipse然后清理导入部分删除所有过时的导入等。如果您再次需要导入的东西,Eclipse将在您使用
Ctrl+SPACE
完成语句时自动添加它们。因此,没有必要在类中保留未使用的代码


像往常一样,在阅读代码时,未使用的代码会分散您和其他人的注意力,并在活动代码中留下一些东西,因为我以后可能需要它,这通常被视为不好的做法。

警告?请Eclipse为您自动清理它们。IntelliJ就是这么做的。如果它足够聪明来警告你,它应该足够聪明来清理它们。我建议找一个Eclipse设置,告诉它不要再唠叨了,做点什么。

从纯粹的角度来看,任何依赖都是产品的“约束”,因此可能会在以后导致维护问题

例如,假设您的程序使用com.X.Y.Z.ObjectPool类,稍后您决定不使用它,但从不删除导入。 如果其他人现在想要实例化org.W.V.Y.ObjectPool并只引用ObjectPool,那么他们不会得到任何警告,直到最后某个地方出现强制转换问题或调用问题

顺便说一句,这不是一个不切实际的情况。每次让Eclipse询问您要导入哪个特定版本的X时,您都会从许多包中选择一个,如果您在那里进行了导入,您可能会在不知情的情况下做出错误的选择


无论采用哪种方式,您都可以要求Eclipse为您清理这些问题。

几年前,我在某个地方读到,每个导入的类都将在运行时与导入的类一起加载。因此,删除未使用的包,尤其是整个包,将减少内存开销。 虽然我认为java的现代版本可以解决这个问题,但这可能不再是一个原因


顺便说一句,在eclipse中,您可以使用Ctrl+Shift+O来组织导入,但您也可以配置一个“清理器”,在每次保存java文件时处理这些事情(以及许多其他事情)。

这与对维护有用的程序的清晰性有关

如果你必须维护一个程序,你会发现每行导入一个类是多么有用

考虑以下场景:

import company.billing.*;
import company.humanrerources.*;

// other imports 


class SomeClass {
      // hundreds or thousands of lines here... 
    public void veryImportantMethod() {
      Customer customer;
      Employee comployee;
      Department dept. 
      // do something with them
     }
 }
当您修复或维护一段代码(或仅阅读它)时,读者了解所使用的类属于哪个包是非常有帮助的。使用如上所示的通配符导入对此没有帮助

即使使用IDE,您也不希望悬停或跳转到声明和返回,如果您能够从功能上理解当前代码所依赖的其他包和类,那么就更容易了

如果这是一个个人项目或一些小项目,这真的不重要,但对于其他开发人员必须使用(并维持多年)的大型项目,这是必须的


对于eclipse,我使用以下方法:窗口->首选项->java->编辑器->保存操作->选中用于组织导入的复选框(还有很多其他有用的东西,比如格式化、将字段设置为最终值等等)。因此,当我保存文件时,eclipse会为我删除不必要的导入。在我看来,如果你不需要什么东西,那么就删除它(或者让它通过eclipse删除)。

仅供参考,这让我很吃惊,因为我认为organize imports实际上并没有删除未使用的导入,我认为它只是对它们进行了排序

自动删除