枚举通常被认为是常量,但是具有公共字段或公共setter的枚举不仅是非常量,而且容易受到恶意代码的攻击。理想情况下,枚举中的字段是私有的,并在构造函数中设置,但如果不能这样做,则应该尽可能降低它们的可见性。
不合规的代码示例
public enum Continent {
NORTH_AMERICA (23, 24709000),
// ...
EUROPE (50, 39310000);
public int countryCount; // Noncompliant
private int landMass;
Continent(int countryCount, int landMass) {
// ...
}
public void setLandMass(int landMass) { // Noncompliant
this.landMass = landMass;
}
合规的代码示例
public enum Continent {
NORTH_AMERICA (23, 24709000),
// ...
EUROPE (50, 39310000);
private int countryCount;
private int landMass;
Continent(int countryCount, int landMass) {
// ...
}
因此我们在构建枚举类的时候尽量不要构建
setter
方法,因为这样会带来一系列的安全隐患。