Sonar:Class variable fields should not have public accessibility

在这里插入图片描述

公有类变量字段不遵守封闭原则,主要有三个问题:

  • 无法添加验证等附加行为。
  • 内部表示暴露在外,事后无法更改。
  • 成员值可能会在代码的任何地方发生变化,并且可能不符合程序员的假设。

通过使用私有属性和访问方法(set 和 get),可以防止未经授权的修改。

不合规代码示例

public class MyClass {
    
    

  public static final int SOME_CONSTANT = 0;     // Compliant - constants are not checked

  public String firstName;                       // Noncompliant

}

合规解决方案

public class MyClass {
    
    

  public static final int SOME_CONSTANT = 0;     // Compliant - constants are not checked

  private String firstName;                      // Compliant

  public String getFirstName() {
    
    
    return firstName;
  }

  public void setFirstName(String firstName) {
    
    
    this.firstName = firstName;
  }

}

例外情况

由于这些字段不可修改,因此本规则忽略了公共final字段。此外,注解字段,无论注解是什么,都将被忽略,因为注解经常被注入框架使用,而注入框架则要求有公共字段。.

参考

MITRE, CWE-493 - Critical Public Variable Without Final Modifier

猜你喜欢

转载自blog.csdn.net/m290345792/article/details/132311998