枚举可以像类一样拥有数据和行为.像这样的东西应该工作……
public enum RequiredFields {
REQUIRED_FIELDS_FOR_DELIVERABLE_PRODUCTS( Fields.NAME, Fields.EMAIL, Fields.ADDRESS ),
REQUIRED_FIELDS_FOR_DOWNLOADABLE_PRODUCTS( Fields.NAME, Fields.EMAIL );
private List fields;
private RequiredFields(String... fields){
this.fields = Arrays.asList(fields);
}
public List getFields(){
return fields;
}
}
进一步改进:
在上面的代码中,fields属性仍然是可变的.有人可以做REQUIRED_FIELDS_FOR_DELIVERABLE_PRODUCTS.getFields().add(..),这将首先击败枚举的全部目的.
构造函数的更好实现是:
private RequiredFields(String... fields){
this.fields = ImmutableList.copyOf(fields); //com.google.common.collect.ImmutableList
}