我在班上宣布了一个很大的枚举
public enum CarMaker{
Honda,
Toyota,
Sony,
...;
public CarMaker at(int index){ //a method to retrieve enum by index
CarMaker[] retval = this.values();
return retval[index];
}
public final SomeObj val; //a value associated with each enum
//.. more custom functions if needed
}
因为每个CarMaker只需要一个实例,如果我想将这个枚举用作存储(如数组,而是使用索引访问每个元素,我可以使用更直观的名称,这是一个不好的做法。我也可以为每个元素都有自定义函数)
CarMaker A = CarMaker.Honda;
CarMaker B = CarMaker.at(1);
//Error above b/c 'at' is not a static member, can I make at a static member?
A.val = 5;
B.val = 6;
//Here I want A to be share data with B since both are "Honda"
//but it doesn't seem to do that yet
System.out.println(A)
System.out.println(B)
//Expected output:
//A: 6
//B: 6
现在A和B似乎创建了自己的“本田”实例,但我想让它们共享。有可能吗?
答案 0 :(得分:5)
enum
应该是不可变的常量。给他们一个公开的,可修改的领域是一个可怕的想法。
答案 1 :(得分:2)
使用您的枚举,但通过合成:创建一个品牌名称枚举,但随后构建您需要名称的对象来保存枚举字段。
实施例
public enum CarMaker {
Honda,
Toyota,
Sony,
Olympus,
Facebook,
Google,
...
}
public class Car {
CarMaker carMaker;
//... etc....
Car(CarMaker carMaker) {
this.carMaker = carMaker;
// ... more code
}
//....