其中一个内置的 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";
}
}
我正在纠结这张支票是否合理。在上面的示例中,ExampleClass
是最终的,它应该保证应该调用“正确”版本的getMeSomething
。此外,似乎有些情况下您可能希望子类覆盖默认行为,在这种情况下要求“this”是错误的行为。
最后,这似乎是过度防御性的编码行为,只会使源代码变得杂乱无章,并且让人更难看到实际发生了什么。
因此,在我向我的架构师建议启用此检查是错误的之前,我想知道是否其他人启用了此检查?您是否因缺少 this
而发现严重错误?
最佳答案
RequireThis规则确实有一个有效的用途,因为它可以防止在应用于字段时方法和构造函数中可能出现的错误。下面的代码几乎可以肯定是一个错误:
void setSomething(String something) {
something = something;
}
像这样的代码可以编译,但除了将方法参数的值重新分配给自身之外什么都不做。更有可能的是作者打算这样做:
void setSomething(String something) {
this.something = something;
}
这是一个可能发生的拼写错误,值得检查,因为如果代码失败,它可能有助于防止难以调试的问题,因为 this.something
没有在程序中设置很久。
checkstyle 设置允许您通过像这样配置规则来保留对字段的有用检查,同时省略大部分不必要的方法检查:
<module name="RequireThis">
<property name="checkMethods" value="false"/>
</module>
对于方法,此规则没有实际效果,因为调用 this.getMeSomething()
或仅调用 getMeSomething()
对 Java 的方法解析没有影响。当方法是静态时,调用 this.getSomethingStatic()
仍然有效这不是错误,它只是各种 IDE 和静态分析工具中的警告。
关于java - 是否应该启用 Checkstyle 中的 RequireThis 检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1702111/