是。
Java没有让我们创建不可修改数组的机制。因此,如果
values()返回相同的可变数组,我们将冒有人可以为所有人更改其内容的风险。
因此,在将不可修改的数组引入Java之前,为了安全起见,
values()必须返回包含所有值的新的/分离的数组。
我们可以用
==运算符来测试它:
MyEnumType[] arr1 = MyEnumType.values();MyEnumType[] arr2 = MyEnumType.values();System.out.println(arr1 == arr2); //false
如果要避免重新创建此数组,则可以简单地存储它并重用
values()以后的结果。有几种方法可以做到,例如。
- 您可以创建私有数组并仅允许通过getter方法访问其内容,例如
private static final MyEnumType[] VALUES = values();// to avoid recreating array MyEnumType getByOrdinal(int){ return VALUES[int]; }- 您可以将结果存储
values()
在不可修改的集合中,List
以确保其内容不会更改(现在这样的列表可以公开)。
public static final List<MyEnumType> VALUES = Collections.unmodifiableList(Arrays.asList(values()));



