【发布时间】:2020-12-26 00:02:12
【问题描述】:
我在用 Java 编码时问自己,import static com.example.method 是一个好方法还是导入整个类更好。
【问题讨论】:
-
在这种情况下,我认为导入整个类更正常。但我不会说导入静态方法就不好了。
-
我限制自己将静态数据导入枚举(尤其是在类中广泛使用时)和使用函数参数时的方法(即 Class.staticComparator());
-
几年前我曾经是静态导入的忠实拥护者,但现在我已经尽我所能禁止它,即使是
Assertions.*或Mockito.*。这背后的基本原理是,并非所有名称都适合静态导入(例如,of、forName、valueOf);添加/删除许多静态导入时,导入单个类不会导致(很多)(git)差异;静态导入可能会发生冲突并且可能看起来模棱两可(例如getInstance、valueOf)。类前缀名称 retain 上下文(例如,比较:SECOND- 它是来自TimeUnit的枚举值还是来自其他地方的常量?) -
@fluffy 上下文非常重要。例如,许多 DSL 被构建为在静态导入时易于阅读。
-
另一个不使用静态导入但现在仅作为个人喜好的优点是我有一个色彩丰富的语法突出显示方案,因此类型(但对于类、接口、抽象类和枚举)被识别为一种彩色上下文标记,以免与调用类的(静态)成员或静态导入的成员混淆(我认为我的 IDE 必须提供一个选项来突出显示静态导入,但这就是我保持可读性的方式)。