if (isProductDeliverable) {
REQUIRED_FIELDS = Arrays.asList(new String[] { Fields.NAME, Fields.EMAIL, Fields.ADDRESS });
} else {
REQUIRED_FIELDS = Arrays.asList(new String[] { Fields.NAME, Fields.EMAIL });
}
取而代之的是,我想要一个包含两个字段的预定义枚举 - REQUIRED_FIELDS_FOR_DELIVERABLE_PRODUCTS
和 REQUIRED_FIELDS_FOR_DOWNLOADABLE_PRODUCTS
我知道枚举的理论,但我从未使用过它们,所以我不知道如何做到这一点。
或者也许是一种通过传递此“isProductDeliverable” boolean 值并获取正确的字段数组来请求必填字段的方法?
最佳答案
枚举可以像类一样拥有数据和行为。像这样的东西应该工作...
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<String> fields;
private RequiredFields(String... fields){
this.fields = Arrays.asList(fields);
}
public List<String> getFields(){
return fields;
}
}
进一步改进:
在上面的代码中,fields
属性仍然是可变的。有人可以做 REQUIRED_FIELDS_FOR_DELIVERABLE_PRODUCTS.getFields().add(..)
,这将打破首先拥有 enum
的全部目的。
构造函数的更好实现是:
private RequiredFields(String... fields){
this.fields = ImmutableList.copyOf(fields); //com.google.common.collect.ImmutableList
}
关于java - 具有数组/列表值的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657579/