Returning a reference to a mutable object value stored in one of the object's fields exposes the internal representation of the object
checkstyle, internals, java, mutable
Solution
Arrays and some collections are not immutable in the sense that their content still remains mutable.
Immutability in Java only concerns object's reference assignment, not its deep content.
Try this:
@Override
public String[] getDescriptions() {
return Arrays.copyOf(DESCRIPTIONS, DESCRIPTIONS.length);
}
BTW, caution to java naming convention.. : `descriptions`, not `DESCRIPTIONS`
Problem
I'm getting this error when running checkstyle on my code for the following lines: ``` @Override public String[] getDescriptions() { return DESCRIPTIONS; } ``` but DESCRIPTIONS `IS NOT` mutable. It's defined as: ``` private static final String[] DESCRIPTIONS = new String[NUM_COLUMNS]; static { // In a loop assign values to the array. for (int i = 0; i < NUM_COLUMNS; ++i) { DESCRIPTIONS[i] = "Some value"; } } ``` This is the complete error message: ``` "Returning a reference to a mutable object value stored in one of the object's fields exposes the internal representation of the object. If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Returning a new copy of the object is better approach in many situations." ``` Related Question: Link