公有类变量字段不遵守封闭原则,主要有三个问题:
- 无法添加验证等附加行为。
- 内部表示暴露在外,事后无法更改。
- 成员值可能会在代码的任何地方发生变化,并且可能不符合程序员的假设。
通过使用私有属性和访问方法(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