其中一个内置的Checkstyle检查是RequireThis,只要你没有预先添加this.到本地字段或方法调用,它就会关闭.例如,
public final class ExampleClass {
public String getMeSomething() {
return "Something";
}
public String getMeSomethingElse() {
//will violate Checkstyle; should be this.getMeSomething()
return getMeSomething() + " else";
}
}
Run Code Online (Sandbox Code Playgroud)
我正在努力解决这个检查是否合理的问题.在上面的例子中,ExampleClass是final,它应该保证getMeSomething应该调用"正确"的版本.此外,似乎有些情况下您可能希望子类覆盖默认行为,在这种情况下,要求"this"是错误的行为.
最后,似乎过于防御性的编码行为只会使源头变得混乱,并且更难以看到实际发生的事情.
所以在我向我的架构师建议这是一个不好的启用检查之前,我想知道是否有其他人启用了这项检查?你是否因为失踪而发现了一个严重的错误this?
RequireThis规则确实有一个有效的用途,因为当它应用于字段时,它可以防止方法和构造函数中可能出现的错误。下面的代码几乎肯定是一个错误:
void setSomething(String something) {
something = something;
}
Run Code Online (Sandbox Code Playgroud)
这样的代码可以编译,但除了将方法参数的值重新分配给自身之外什么也不做。更有可能的是,作者有意这样做:
void setSomething(String something) {
this.something = something;
}
Run Code Online (Sandbox Code Playgroud)
这是一个可能发生的拼写错误,值得检查,因为如果代码由于this.something稍后在程序中没有设置而失败,它可能有助于防止难以调试的问题。
checkstyle 设置允许您保留对字段的这种有用的检查,同时通过配置如下规则来省略对方法的基本上不必要的检查:
<module name="RequireThis">
<property name="checkMethods" value="false"/>
</module>
Run Code Online (Sandbox Code Playgroud)
当涉及到方法时,这条规则没有实际作用,因为调用this.getMeSomething()or 只是getMeSomething()对 Java 的方法解析没有影响。当方法是静态时调用this.getSomethingStatic()仍然有效,这不是错误,它只是各种 IDE 和静态分析工具中的警告。
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |