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

Java 不应在非静态导入之后的静态导入语句,java,groovy,static,import,codenarc,Java,Groovy,Static,Import,Codenarc,Codenarc是一个分析Groovy代码缺陷、错误实践、不一致性、样式问题等的框架 这条规则有什么原因吗:: 检查静态导入语句,该语句应 永远不要追求非静态输入 违反行为的例子: import my.something.* import static foo.bar.* public class MyClass{} 我不理解这条规则的动机或含义。正如Marko Topolnik所说,导入的顺序与程序的意义无关 我试着在JLS中寻找一个明确的声明,但是我找不到。Java教程也没有提到导入顺序

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

这条规则有什么原因吗:

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

违反行为的例子:

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

public class MyClass{}

我不理解这条规则的动机或含义。

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

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

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


更新

@尤金·斯捷潘年科夫指出了这个问题

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


我想,这意味着这个bug可能是Codenarc警告的动机之一。但是,如果您使用的Java编译器受到bug的影响,那么任何导入顺序“错误”的代码都不会编译。。。将Codenarc警告模拟化。

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


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

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

这只是惯例。就Java而言,这是无关紧要的。IntelliJ的格式化程序默认情况下将静态导入放在正常导入之后。@PeterLawrey是的,这是有道理的!看这张照片