枚举类型name方法的应用

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方法。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的枚举类型enum)是一种特殊的数据类型,用于定义一组常量。枚举类型在Java中是一种独立的数据类型,可以包含常量、方法、构造函数等成员。 以下是Java枚举类型的使用方法: 1. 定义枚举类型 枚举类型使用enum关键字定义,枚举类型的名称通常使用大写字母表示。 例如: ``` enum Color { RED, GREEN, BLUE; } ``` 上面的代码定义了一个名为Color的枚举类型,包含三个常量:RED、GREEN、BLUE。 2. 访问枚举常量 枚举类型中定义的常量可以像访问普通变量一样访问,使用枚举类型名称和常量名称即可。 例如: ``` Color c = Color.RED; ``` 上面的代码定义了一个Color类型的变量c,并将其赋值为RED常量。 3. 枚举常量方法 枚举常量可以包含方法,这些方法可以在常量之间共享。 例如: ``` enum Color { RED("红色"), GREEN("绿色"), BLUE("蓝色"); private String name; private Color(String name) { this.name = name; } public String getName() { return name; } } ``` 上面的代码定义了一个名为Color的枚举类型,包含三个常量,每个常量都有一个名称属性和一个getName方法。 4. 枚举的遍历 枚举类型可以使用values()方法获取所有的枚举常量,然后通过循环遍历枚举常量。 例如: ``` for (Color c : Color.values()) { System.out.println(c); } ``` 上面的代码遍历了Color类型的所有常量,并打印出每个常量的名称。 以上是Java枚举类型的基本使用方法枚举类型在Java中广泛应用于定义常量、状态等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值