Effective java says:
// Potential security hole!
static public final Thing[] VALUES = { … };
Can somebody tell me what is the security hole?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Declaring
static final publicfields is usually the hallmark of a class constant. It’s perfectly fine for primitive types (ints, doubles etc..), and immutable classes, like strings andjava.awt.Color. With arrays, the problem is that even though the array reference is constant, the elements of the array can still be changed, and as it’s a field, changes are unguarded, uncontrolled, and usually unwelcome.To combat this, the visibility of the array field can be restricted to private or package private, so you have a smaller body of code to consider when looking for suspicious modification. Alternatively, and often better, is to do away with the array together and use a ‘List’, or other appropriate collection type. By using a collection, you control if updates are allowed, since all updates go through methods. You can prevent updates by wrapping your collection using
Collections.unmodifiableList(). But beware that even though the collection is immutable, you must also be sure that the types stored in it are also immutable, or the risk of unsolicited changes on a supposed constant will reappear.