enum
s are generally thought of as constant, but an enum
with a public
field or public
setter is
not only non-constant, but also vulnerable to malicious code. Ideally fields in an enum
are private
and set in the
constructor, but if that's not possible, their visibility should be reduced as much as possible.
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) { // ... }