Checkstyle规则以防止调用某些方法和构造函数

gaw*_*awi 7 java coding-style checkstyle

是否可以使用Checkstyle禁止使用某些构造函数或使用系统相关默认值(locale,charset等等)的方法.我更喜欢强制执行一个策略,程序员应该明确系统相关的值.所以我认为以下项目是危险的:

  • 所有的构造者 java.io.FielWriter
    • 使用系统相关的编码
  • OutputStreamWriter(OutputStream os)构造函数java.io.OutputStreamWriter
    • 使用系统相关的编码
  • java.lang.String.toLowerCase()方法
    • 使用系统默认语言环境
  • java.util.Calendar.getInstance()方法
    • 使用系统默认语言环境和默认时区

(列表继续,你得到的图片).

是否可以使用Checkstyle 5.5强制执行此操作?

Mat*_*ell 1

默认情况下您无法执行此操作。但是,您可以实现自己的检查器来检查这些方法。

第一个选项是使用 Miscellaneous->Regexp。显然,只有当您可以使用正则表达式找到违规行为时,这才有可能。您需要设置 invalidPattern = true。我认为这将是一个很好的起点。

第二个选项是创建您自己的支票。请参阅写支票

编写检查器有一些限制。第一个也是最重要的是您看不到其他文件。没有任何交叉检查。从网站:

  1. 您无法确定表达式的类型。
  2. 您无法看到其他文件的内容。(尽管您可以保存处理后的文件以供以后使用)

这意味着您无法实现 IntelliJ IDEA 等高级 IDE 中提供的一些代码检查功能。例如,您将无法实现查找冗余类型转换或未使用的公共方法的检查。

因此,您无法检查 java 是否正在调用一个具有 Locale 替代方案的方法。您可以使用不允许调用的方法黑名单。因此,例如调用 new FileWriter() 将检查传递的参数数量等。