假设,我希望枚举的所有实例共享一个 int[] 数组。这是一个例子
public enum SampleEnum {
Enum1(1), Enum2(2), Enum3(3), Enum4(4);
private int[] values;
private static final int[] SharedValues = {1, 2, 3, 4, 5};
private static final int ValueCount = SharedValues.length;
private SampleEnum(int factor) {
// I prefer to calculate data once within constructor
values = new int[ValueCount];
for (int i=0; i<ValueCount; i++)
values[i] = SharedValues[i] * factor;
}
private int[] getValues() {
return values;
}
}
猜猜看:对于 ValueCount 和 SharedValues,我收到消息“无法引用初始化程序中的静态枚举字段”。
这个问题可以通过将静态数组放在一个单独的类中来解决:
class SampleEnumData {
static final int[] SharedValues = {1, 2, 3, 4, 5};
}
public enum SampleEnum {
Enum1(1), Enum2(2), Enum3(3), Enum4(4);
private int[] values;
private SampleEnum(int factor) {
// I prefer to calculate data once within constructor
int[] sharedValues = SampleEnumData.SharedValues;
int valueCount = sharedValues.length;
values = new int[valueCount];
for (int i=0; i<valueCount; i++)
values[i] = sharedValues[i] * factor;
}
private int[] getValues() {
return values;
}
}
但这看起来更像是一个尴尬的补丁,而不是一个合乎逻辑的解决方案。
是否有理由不允许在枚举初始化程序中引用静态类?