java - 是否应该启用 Checkstyle 中的 RequireThis 检查?

标签 java this checkstyle

其中一个内置的 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/

相关文章:

java - 在递归函数中使用一对列表时如何解决 ConcurrentModificationException?

java - 对于 Kotlin 中的高阶函数,为什么 lambda 会显示在其他函数参数之外?

php - 在 PHP 中重新分配 $this

maven - 在多模块 Maven 项目中共享特定的 PMD 规则集

java - 当 javadoc 和 @param 之间没有空行时,如何使 checkstyle 失败

java - 如何正确使用模拟进行单元测试

java - JMenuBar 到 JFrame

c++ - 绕行并使用 _thiscall 作为 Hook (GCC 调用约定)

javascript - 使用 TypeScript 自定义 knockout 验证规则

maven - 将Eclipse格式化程序文件转换为Checkstyle文件