怎样在Java中使用嵌套枚举类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (254)

我想到了一个涉及嵌套枚举的数据结构,可以执行如下操作:

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

如果有方法声明:

someMethod(Drink type)
someOtherMethod(DrinkTypeInterface type)

然后:

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

public enum Drink {

    COFFEE("Coffee");

    private String groupName;

    private Drink(String groupName) {
        this.groupName = groupName;
    }

    public enum Coffee implements DrinkTypeInterface {

        COLUMBIAN("Columbian Blend"),
        ETHIOPIAN("Ethiopian Blend");

        private String label;

        private Coffee(String label) {
            this.label = label;
        }

        public String getLabel() {
            return this.label;
        }
    }

    String getGroupName() {
        return this.groupName;
    }
}

接口:

public interface DrinkTypeInterface {

    public String getLabel();
}

想了解一下用Java做这类事情的最佳方法?

提问于
用户回答回答于
如果你做了饮料类型它本身就是一个枚举,可以以相同的方式处理饮料类型和饮料枚举,如下例程序所示:
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 Blend
Tea - Mint 
Tea - Herbal 
Tea - Earl Grey

热门问答

腾讯云广州一区DNS变更,需要怎么操作?

思潮澎湃轻描淡写的生活,但思潮澎湃
推荐
我也收到相关的通知了,这里分享下~ 2019年1月31日,腾讯云将对广州地区旧的基础网络DNS服务器(10.225.30.181、10.225.30.223)进行下线。在此期间,腾讯云提供最新的DNS服务器供您更新使用。 我们建议您尽快将DNS服务器配置进行更新,并且我们为您提供...... 展开详请

人脸融合API Image 参数Base64数据有没有长度限制?

推荐

不支持,GET仅支持32KB以内的请求。但是您可以使用POST方法发送同样的请求,签名方式v1支持1MB的POST请求,签名方式v3支持10MB的POST请求

如何分析云测大师测试之后的结果参数?

Hyman Wang

腾讯云 · 高级产品经理 (已认证)

负责腾讯云游戏行业产品规划及发展。关注游戏行业生态,致力于腾讯内部游戏生态和技术能力开放,以及周边游戏生态资源整合。
推荐

请参考在线文档 : https://cloud.tencent.com/document/product/653/13636

Git上面如何将之前设置为public的项目修改为private?

SQL GM热爱数据库的小工匠
推荐
可以修改的,步骤如下: 1、进入项目主页,点击设置 image.png 2、点击高级设置、仓库设置、更改可见性级别 image.png 3、点击修改为私有即可 image.png ... 展开详请

上传的视屏会被压缩吗?

西风

renzha.net · 站长 (已认证)

www.renzha.net
推荐

会的,上传的视频会进行转码,所谓视频转码(Video Transcoding),是指将一个视频码流转换成另一个视频码流,以适应不同的网络带宽、不同的终端处理能力和不同的用户需求。

请问TCPlayer ios全屏播放,如何自动横屏全屏?

西风

renzha.net · 站长 (已认证)

www.renzha.net
推荐
通过 video 属性 “x5-video-orientation” 声明 TBS 播放器支持的方向,可选值:0(landscape 横屏),1:(portraint竖屏),2:(landscape | portrait 跟随手机自动旋转)。 (该属性为 TBS 内核实验性属性,...... 展开详请

所属标签

扫码关注云+社区