gpt4 book ai didi

java - 将子类别添加到 java 枚举

转载 作者:行者123 更新时间:2023-11-29 09:52:38 24 4
gpt4 key购买 nike

假设我有一个简单的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com