永远不应该在非静态导入语句之后添加静态导入语句。

7
Codenarc是一个分析Groovy代码缺陷、不良实践、不一致性、风格问题等的框架。
这条规则是否有原因:MisorderedStaticImports 规则

Checks for static import statements which should never be after nonstatic imports.

Examples of violations:

import my.something.*
import static foo.bar.*

public class MyClass{}
我不明白这个规则的动机或影响。

5
只是惯例而已。就 Java 而言,这并不相关。 - Marko Topolnik
4
默认情况下,IntelliJ的格式化程序将静态导入放在普通导入之后。 - Peter Lawrey
1
@PeterLawrey 没错,这个想法很好,你可以看一下这个例子 - Eugene Stepanenkov
3个回答

12
如Marko Topolnik所说,导入的顺序对程序的含义没有影响。
我尝试查看JLS以获得明确的陈述,但我找不到。Java教程也没有提及导入顺序。但是,import的语义使其没有任何区别。如果导入由于导入顺序而导致任何潜在的歧义,则JLS表示这是编译错误。
因此,这只是一种风格惯例。(实际上,如果您查看规则,它甚至为您提供了首先放置静态导入的选项!)

更新

@Eugene Stepanenkov 指出了这个Q&A

这是在Java 8之前版本的Oracle Java编译器中一个晦涩的错误引起的。它最终被确认为一个错误并得到了修复。

我猜,这意味着该错误可能已成为 Codenarc 警告的动机之一。然而,如果您使用受此错误影响的Java编译器,则任何具有“错误”顺序的导入代码都将无法编译...从而使 Codenarc 警告变得无意义。


1

选择导入的顺序(静态和非静态)可能会在某些边缘情况下产生问题,例如example


0
一个样式问题。只会有一个或两个静态导入,但它们对可读性有很大的影响,例如引入函数名称。因此将它们放在顶部(供阅读)可能被认为是良好的风格。IDE 折叠 "[+]" 支持也可能已经考虑进去了。
我认为他们希望将静态导入与其他导入分开。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接