栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中使用嵌套的枚举类型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中使用嵌套的枚举类型

Drink.COFFEE.getGroupName();Drink.COFFEE.COLUMBIAN.getLabel();

首先,您提供的示例代码在某种程度上违反了“德米特律”-因为COLUMBIAN实例字段仅用于检索标签。同样,通过这种结构,COLUMBIAN 必须
是COFFEE枚举的一个实例,但是我不认为这就是您真正想要的。

someMethod(Drink type)someOtherMethod(DrinkTypeInterface type)someMethod(Drink.COFFEE)someOtherMethod(Drink.COFFEE.COLUMBIAN)

我要从样本中收集的信息是,您想要一个枚举,其中包含实际饮料的“组类型”,然后每种饮料对于特定类型的饮料都有各自的值。您的示例给出了咖啡,但是茶也应该起作用。

问题是您如何放置枚举。正如我之前说过的,您必须使COLUMBIAN成为COFFEE枚举的实例,但这并不是构造此结构的最佳方法。

问题在于您有饮料,然后是咖啡/茶,然后是它们的个人类型。但是,如果您考虑一下,尽管HerbalTea是一种茶,但它也是一种DRINK-
因此,它不只是TEA实例而已。

但是,如果您将饮料 类型
本身作为枚举,则会得到所需的东西,并且结构会更清晰。并且由于界面和委托的力量,饮料类型和饮料枚举可以以相同的方式处理,如以下示例程序所示:

public final class DrinkEnumExample {    public interface DrinkTypeInterface {        String getDisplayableType();    }    public static enum DrinkType implements DrinkTypeInterface {        COFFEE("Coffee"), TEA("Tea");        private final String type;        private DrinkType(final String type) { this.type = type;        }        public String getDisplayableType() { return type;        }    }    public static enum Drink implements DrinkTypeInterface {        COLUMBIAN("Columbian Blend", DrinkType.COFFEE),        ETHIOPIAN("Ethiopian Blend", DrinkType.COFFEE),        MINT_TEA("Mint", DrinkType.TEA),        HERBAL_TEA("Herbal", DrinkType.TEA),        EARL_GREY("Earl Grey", DrinkType.TEA);        private final String label;        private final DrinkType type;        private Drink(String label, DrinkType type) { this.label = label; this.type = type;        }        public String getDisplayableType() { return type.getDisplayableType();        }        public String getLabel() { return label;        }    }    public DrinkEnumExample() {        super();    }    public static void main(String[] args) {        System.out.println("All drink types");        for (DrinkType type : DrinkType.values()) { displayType(type); System.out.println();        }        System.out.println("All drinks");        for (Drink drink : Drink.values()) { displayDrink(drink); System.out.println();        }    }    private static void displayDrink(Drink drink) {        displayType(drink);        System.out.print(" - ");        System.out.print(drink.getLabel());    }    private static void displayType(DrinkTypeInterface displayable) {        System.out.print(displayable.getDisplayableType());    }}

该程序的输出如下:

All drink types Coffee Tea All drinks Coffee - Columbian Blend Coffee - Ethiopian BlendTea - Mint Tea - Herbal Tea - Earl Grey

现在,如果由于某种原因您不想在一个枚举中喝完所有饮料,那么我就不明白您要干什么。在那种情况下,如果您确实具有跨枚举的功能,则进行单独的Coffee和Tea(以及其他)枚举,然后将接口应用于两个(或多个)枚举。但是,我认为您正在尝试像这样对它们进行分组。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号