Enumerations can have data and behavior as classes. Something like this should work ...
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;
}
}
Further improvement:
In the above code, the property fieldsis still changed. Someone could do REQUIRED_FIELDS_FOR_DELIVERABLE_PRODUCTS.getFields().add(..)that would exceed the purpose of the appointment enumin the first place.
:
private RequiredFields(String... fields){
this.fields = ImmutableList.copyOf(fields);
}