【问题标题】:Static import statements which should never be after nonstatic imports永远不应该在非静态导入之后的静态导入语句
【发布时间】:2012-11-02 19:12:13
【问题描述】:

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

这条规则有原因吗:MisorderedStaticImports Rule

检查静态导入语句应该 永远不要追求非静态导入。

违规示例:

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

public class MyClass{}

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

【问题讨论】:

  • 这只是惯例。就Java而言,它是无关紧要的。
  • IntelliJ 的格式化程序默认将静态导入放在正常导入之后。
  • @PeterLawrey 是的,想法确实如此,而且很有意义!看看example

标签: java groovy static import codenarc


【解决方案1】:

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

我尝试查看 JLS 以获得明确的声明,但我找不到。 Java教程也没有提到导入顺序。但是,import 的语义是没有区别的。如果导入由于导入顺序而导致任何潜在的歧义,JLS 会说这是一个编译错误。

因此,这只是一种风格约定。 (事实上​​,如果您查看规则,它甚至可以让您选择将静态导入放在首位!)


更新

@Eugene Stepanenkov 指出了这个问答

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

我猜,这意味着该错误可能是 Codenarc 警告的动机的一部分。但是,如果您使用的是受该错误影响的 Java 编译器,那么任何导入顺序为“错误”的代码都将根本无法编译……呈现 Codenarc 警告毫无意义。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      选择导入顺序(静态和非静态)可能会在example 等极端情况下产生问题。

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 2011-02-17
        • 1970-01-01
        • 2011-11-11
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多