【问题标题】:How to prevent fully qualified names in Java code如何防止 Java 代码中的完全限定名称
【发布时间】:2016-04-16 15:00:14
【问题描述】:

是否可以使用 checkstyle 检查 java 项目是否在代码中使用完全限定名称。我们想阻止像

这样的代码
if (org.apache.commons.lang3.StringUtils.isBlank(name)) { 
 ....
 ....
} 

并希望强制改为导入包。

还有其他工具可以帮助我们完成它吗?

【问题讨论】:

  • 如果存在类名冲突,您对该工具有何期望?
  • 可以通过导入控制规则查看。然后配置 Maven Checkstyle 插件,这样任何违规都将不允许构建...?
  • 有趣的问题。但是您确定要启用此功能吗?在处理遗留代码时,我有时需要使用完全限定名称,并且有人使用了 custom StringUtils 类。鉴于该类的不足,我最终在该类中使用了 Apache Commons StringUtils,而自定义 StringUtils 已经使用了导入,因此我需要它。
  • @JonathanThoms 我们也在处理遗留代码,并且非常小心地删除了您描述的那种自定义类。我们需要在构建过程中进行检查,以便不再将此类完全限定名称添加到代码中。
  • @varevarao 我们不希望我们的代码具有完全相同的类名,这些类名需要在同一个 .java 文件中使用。如果确实出现这种情况,该工具可以提供一种指定例外情况的方法。

标签: java checkstyle intellij-14


【解决方案1】:

据我所知,Checkstyle 无法做到这一点。但是,有一个名为UnnecessaryFullyQualifiedName 的 PMD 规则可能值得一看。存在用于 PMD 的 IntelliJ 插件,例如 QAPlug PMD,可免费下载。

不过,请准备好看到很多误报。例如,如果没有完全限定的类名(例如foo.Abar.A),就不能引用共享相同简单名称的两个类。也可能是 PMD 实际检查这种情况,可能值得一试。

【讨论】:

  • PMD 检查仅在已经存在类的导入形式时发出警告(我认为它会比较代码中的导入和完全限定名称),因此误报不多,但不会如果完全限定的类尚未在导入中列出,则发出警告。像 [a-z]+[.][a-z]+[.][A-Z] 这样的区分大小写的正则表达式搜索可以帮助捕获一些未导入的正则表达式,但这肯定会出现误报 :)
【解决方案2】:

FTR 我刚刚提出了https://github.com/sevntu-checkstyle/sevntu.checkstyle/issues/462 关于可能会在一段时间内将其添加到 Checkstyle .. 欢迎贡献! ;-)

【讨论】:

  • 我会赞成 mariadb java 包装器的创建者的任何东西 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多