我使用枚舉來定義可以添加到產品(自定義徽標,顏色等)的幾種變化。每個變體都有幾個選項(ID,兩種語言的描述,過程中的變化,價格等)。它有方法來進一步定義變體(例如應使用哪種顏色)或覆蓋某些選項。一個產品可以在ArrayList中存儲零個,一個或多個變體。另外,一種產品可以多次應用於一種產品。Java相同枚舉值不同值
只要我只用一次變化,一切都很好。但如果我多次使用它,看起來所有人都會得到相同的選擇。
示例代碼:
TestClass.java:
import java.util.ArrayList;
public class TestClass {
public static void main(String[] args) {
ArrayList<TestEnum> enums = new ArrayList<>();
TestEnum enumVar;
enumVar = TestEnum.TEST1;
enums.add(enumVar);
enumVar = null;
enumVar = TestEnum.TEST2;
enums.add(enumVar);
enumVar = null;
enumVar = TestEnum.TEST2;
enumVar.setOp1("new op21");
enumVar.setOp2("new op22");
enumVar.setOp3("new op23");
enums.add(enumVar);
enumVar = null;
enums.forEach((element) -> {
System.out.println("op1: " + element.getOp1() + "; op2: " + element.getOp2() + "; op3: " + element.getOp3());
/*
Expecting:
op1: op11; op2: op12; op3: op13
op1: op21; op2: op22; op3: op23
op1: new op21; op2: new op22; op3: new op23
Output:
op1: op11; op2: op12; op3: op13
op1: new op21; op2: new op22; op3: new op23
op1: new op21; op2: new op22; op3: new op23
*/
});
}
}
TestEnum.java:
public enum TestEnum {
TEST1("op11", "op12", "op13"),
TEST2("op21", "op22", "op23"),
TEST3("op31", "op32", "op33"),
TEST4("op41", "op42", "op43"),
TEST5("op51", "op52", "op53");
private String op1;
private String op2;
private String op3;
TestEnum(String op1, String op2, String op3) {
this.op1 = op1;
this.op2 = op2;
this.op3 = op3;
}
public void setOp1(String op1) {
this.op1 = op1;
}
public String getOp1() {
return this.op1;
}
public void setOp2(String op2) {
this.op2 = op2;
}
public String getOp2() {
return this.op2;
}
public void setOp3(String op3) {
this.op3 = op3;
}
public String getOp3() {
return this.op3;
}
}
是否有可能做我心目中有一個枚舉?
如果是,我該怎麼做?也許有可能在某種狀態下創建一個枚舉的副本?
@tanjir你肯定**可**具有枚舉的函數和屬性。 –
如何使用buider模式(https://en.wikipedia.org/wiki/Builder_pattern)而不是枚舉? – Aurelien