枚举类型name方法的应用

本文介绍了Java中Enum类型的使用,包括如何通过code和message字段定义枚举,以及如何简化枚举类只使用name字段。同时,讨论了name()方法和toString()方法的区别,以及如何根据枚举名获取枚举值。此外,还建议了自定义toString()方法以提供更详细的枚举描述,并提到了valueOf()方法在找不到匹配时会抛出异常的情况。
摘要由CSDN通过智能技术生成

Enum类型是Java语言中一种特殊的类型,它拥有一组固定的值,在开发中用得很多。常见的用法是定义一个枚举之后,给每一个枚举值定义一个code, 或者name的属性,来作为这个枚举值的唯一标识。还有一个字段message,用来保存这个枚举值的描述。例如下面这个动物枚举类:

public enum AnimalEnum2 {
    DOG("dog", "狗"),
    CAT("cat", "猫"),
    ;
    
    private String code;
    private String message;
    
    AnimalEnum2(String code, String message) {
        this.code = code;
        this.message = message;
    }
    
    public static AnimalEnum2 getByCode(String code) {
        for (AnimalEnum2 animalEnum2 : AnimalEnum2.values()) {
            if (animalEnum2.code.equals(code)) {
                return animalEnum2;
            }
        }
        return null;
    }
}

如上代码段,一般还会有一个getByCode方法,用来根据code获取一个枚举值。

但是,有时候我们并不需要为枚举值定义那么多字段,比如可以用枚举值来代替code,因为它也是唯一的。那么这种情况下,应该如何实现根据一个字符串获取这个枚举类中的某一个枚举值呢?

答案是name()方法。这个方法会返回一个枚举值的字面量,比如上面Animal2.DOG的字面量就是"DOG"这个字符串。于是上面这个枚举类可以改写成下面这张形式:

public enum AnimalEnum {
    DOG("狗"),
    CAT("猫"),;
 
    private String message;
 
    AnimalEnum(String message) {
        this.message = message;
    }
 
    public static void main(String[] args) {
        System.out.println(AnimalEnum.DOG.name());
        System.out.println(AnimalEnum.DOG.toString());
        System.out.println(AnimalEnum.DOG.equals(AnimalEnum.valueOf("DOG")));
        System.out.println(AnimalEnum.getByName("CAT"));
    }
 
    public static AnimalEnum getByName(String name) {
        for (AnimalEnum animalEnum : AnimalEnum.values()) {
            if (animalEnum.name().equals(name)) {
                return animalEnum;
            }
        }
        return null;
    }
}

像上面这样,遍历所有的枚举值的时候,直接使用name()方法获取到当前的枚举值的名字,再合name进行比较,也可以找到对应的枚举值。

顺便说一下枚举类型的toString()方法。这个方法是继承自Object方法,但是在枚举类中,被重写为直接调用name()方法。所以如果我们不改写toString()方法的话,这两个方法是等价的。

但是Java官方推荐应该尽量自定义toString()方法。因为这样可以让不同的类有符合各自需要的说明。所以我们使用枚举的时候,也可以自定义toString()方法,以产生更加有意义的说明。

而name()方法,官方的说明是应该用在必须要准确获取枚举值的字面值的时候才使用。比如枚举类型自带的valueOf(String name)方法,其实也是一个根据name获取枚举值的方法。不过它在没有匹配的时候会抛出一个异常,而不是返回null。

所以如果我们仅仅是想根据name获取一个枚举值,并且希望没有匹配到就抛一个异常,我们可以不自己实现这个方法,而是直接使用自带的valueOf方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值