不应在非静态导入之后的静态导入语句



Codenarc是一个分析Groovy代码缺陷、不良实践、不一致、样式问题等的框架。

此规则是否有原因:无序StaticImport规则

检查静态导入语句永远不要追求非平稳进口。

违规示例:

import my.something.*
import static foo.bar.*
public class MyClass{}

我不明白这个规则的动机或含义。

正如Marko Topolnik所说,导入的顺序与程序的含义无关。

我试着在JLS中找到一个明确的声明,但我找不到。Java教程也没有提到导入顺序。然而,import的语义是这样的,它没有区别。如果由于进口订单,进口导致任何潜在的歧义,JLS表示这是一个编译错误

因此,这只是一种文体惯例。(事实上,如果你看看这个规则,它甚至让你可以选择把静态导入放在第一位!)


更新

@Eugene Stepanenkov指出;

  • 为什么我会根据java导入和静态导入的顺序得到不同的编译结果

这是由Java 8之前的Oracle Java编译器版本中的一个模糊错误引起的。它(最终)被确认为一个错误并被修复。

我想,这意味着错误可能是Codenarc警告的部分动机。然而,如果您使用的Java编译器受到该错误的影响,那么任何以"错误"顺序导入的代码都不会编译。。。使得Codenarc的警告变得毫无意义。

样式问题。只有一两个静态导入,但它们对可理解性有很大影响,比如引入函数名。因此,将它们放在顶部(阅读)可能被认为是一种好的风格。IDE崩溃的"[+]"支持也可能被考虑在内。

我认为他们希望静态导入与其他导入分离。

在示例中这样的边缘情况下,选择导入顺序(静态和非静态)可能会产生问题。

最新更新