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

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

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

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

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

热门问答

对象存储,listObjects 列表过滤,如何显示文件夹('/'结尾的空文件)?

你好,您可以参考下面的程序获取目录,而排除掉文件对象: ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); listObjectsRequest.setBucketName(bucketName); ...... 展开详请

网站备案授权码哪里有呀 各位大神?

西风

renzha.net · 站长 (已认证)

www.renzha.net
推荐
1.”备案授权码是? ” 备案授权码是由服务器生成的用于备案的授权凭证,实际指向该服务器的 IP。 2.”我在这里购买了域名,并不准备在这里购买空间。 请问我如何完成备案?” 若不准备在账号下购买腾讯云服务器,可以使用其他人服务器生成的备案授权码进行备案, 备案授权码参考备案授权...... 展开详请

上传图片返回'code' => int -2 ?

我不是米

腾讯 · 工程师 (已认证)

对象存储工程师
推荐

COS范围下载?

许金泉

腾讯 · 高级工程师 (已认证)

腾讯云COS前端开发
推荐
可以用标准 Http 头部 Range 来指定下载范围。 COS 的 SDK 应该都支持自定义 Header,可以设置: Range: 'bytes=2000-7999' 和 Range: 'bytes=9000-9599'... 展开详请

cmq的Queue Endpoint 订阅-消费问题?

请您查看一下您的根账号下是否有持久密钥? 如果无法解决您的问题,请您在控制台的右上角发起工单提问(https://console.cloud.tencent.com/workorder),我们会有专人进行问题排查和解决,感谢您使用CMQ消息队列服务

我开通了直播,现在可以使用二维码扫码播放,但是我想在播放的界面,加一个发红包的功能,该怎么做?

腾讯云-chaoli腾讯云产品二部,技术支持
推荐
使用云通信功能,可以实现发红包。http://faq.qcloudtrtc.com/docs/%E4%BA%91%E9%80%9A%E8%AE%AF%E6%A8%A1%E5%9D%97/%E6%B6%88%E6%81%AF%E9%97%AE%E9%A2%98.html?h=%E7...... 展开详请

所属标签

扫码关注云+社区