假设我有一个简单的 Java 枚举:
public Enum itemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
private String dbCode;
public ItemType(String dbCode){
this.dbCode = dbCode;
}
public String getDbCode(){
return this.dbCode;
}
}
我现在想为这个枚举引入一个“类别”,例如区分液体元素和固体元素。我在枚举类中找到了两种执行此操作的方法,请参见下文。但是,两者都存在相同的反模式:如果类别数量或项目数量增加/减少(想象 100 个项目类型和 10 个类别!),我有很多更新工作要做。我可以使用什么模式来设计这个枚举尽可能干净和可重用?
第一种方法:向枚举添加额外的属性
public Enum itemType
{
FRUITS("fru",false),
VEGETABLES("veg",false),
LIQUOURS("liq",true),
SODAS("sod",true);
private String dbCode;
private boolean liquid;
public ItemType(String dbCode, boolean liquid){
this.dbCode = dbCode;
this.liquid = liquid;
}
public String getDbCode(){
return this.dbCode;
}
public boolean isLiquid(){
return this.liquid;
}
}
第二种方法:使用静态方法询问子类别
public Enum itemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
private String dbCode;
public ItemType(String dbCode){
this.dbCode = dbCode;
}
public String getDbCode(){
return this.dbCode;
}
public static boolean isLiquid(ItemType type){
switch(t){
case SODA:
case LIQOURS: return true;
default: return false;
}
}
最佳答案
使用 EnumSet
怎么样?为此?
public enum ItemType
{
FRUITS("fru"),
VEGETABLES("veg"),
LIQUOURS("liq"),
SODAS("sod");
public static final EnumSet<ItemType> LIQUIDS = EnumSet.of(LIQUOURS, SODAS);
// ...
}
然后您可以使用 ItemType.LIQUIDS.contains(someItemType)
来检查 someItemType
是否为“液体”。
关于java - 将子类别添加到 java 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617482/