问题

是否有任何充分的理由避免Java中未使用的import语句?据我所知,它们适用于编译器,因此许多未使用的导入不会对编译的代码产生任何影响。是否只是为了减少混乱并避免命名冲突?

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


#1 热门回答(77 赞)

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

但在极少数情况下可能存在命名冲突,例如导入列表界面。

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

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


#2 热门回答(47 赞)

一个是如果你从类路径中删除导入引用的类,你就不会得到一个没有用处的愚蠢的编译器错误。当你执行"在哪里使用"搜索时,你不会得到误报。

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

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

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


#3 热门回答(9 赞)

从纯粹主义的角度来看,任何依赖都是对产品的"约束",因此可能导致以后的维护问题。

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

顺便说一下,这不是一个不切实际的场景。每当你有Eclipse问你要导入哪个特定版本的X,并从多个软件包中选择一个时,如果你已经进行了导入,你可能会在不知情的情况下做出错误的选择。

无论哪种方式,你都可以要求Eclipse为你清理这些内容


原文链接