静态导入语句,永远不应该在非静态导入之后

时间:2012-11-14 09:41:36

标签: java groovy static import codenarc

Codenarc是一个框架,可以分析Groovy代码中的缺陷,不良做法,不一致,样式问题等。

此规则是否有理由: MisorderedStaticImports Rule

  

检查应该的静态导入语句   永远不会在非静态进口之后。

     

违规行为的例子:

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

public class MyClass{}

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

3 个答案:

答案 0 :(得分:8)

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

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

因此,这只是一种风格惯例。 (实际上,如果你看一下规则,它甚至可以让你选择先放置静态导入!)


<强>更新

@Eugene Stepanenkov指出了这个Q&amp; A

在Java 8之前的Oracle Java编译器版本中,这是一个模糊的错误。它最终被确认并修复了。

我想,这意味着 这个bug可能是Codenarc警告动机的一部分。但是,这就是问题:如果你使用的是受bug影响的Java编译器,那么带有“错误”顺序的导入的代码将根本无法编译......使Codenarc警告无法实现。

答案 1 :(得分:0)

风格问题。将只有一个,两个静态导入,但它对可理解性有很大影响,如引入函数名称。因此将它们放在顶部(用于阅读)可能被认为是好的风格。可能也考虑了IDE折叠“[+]”支持。

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

答案 2 :(得分:0)

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