一文撸清楚Java中的枚举enum

Laughing
2021-08-30 / 0 评论 / 865 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月16日,已超过307天没有更新,若内容或图片失效,请留言反馈。

Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>

定义一个枚举

定义一个枚举,最简单的方式可能向下面这样

public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE };

枚举的构造函数

枚举可以定义构造函数,但是必须是private类型。

public enum DishType {

    Fish("FISH"), Chiken("CHIKEN"), Meat("MEAT");

    private String type;

    private DishType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

}

你可以向上面这样添加private修饰符或者啥都不添加,但是不能添加publicprotect

重写方法

与类一样,可以重写枚举的方法,比如toString()方法。

public enum DishType {

    Fish("FISH"), Chiken("CHIKEN"), Meat("MEAT");

    private String type;

    private DishType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return type;
    }

}

获取枚举值

可以通过.语法获取枚举值。如果想获取所有的值,可以通过values()方法

 for(DishType dishType:DishType.values()){
            System.out.println(dishType);
        }

获取原始值

可以通过ordinal()方法获取枚举的原始值,也就是123

System.out.println(fish.ordinal());

控制台输出0,因为Fish是我们在枚举值第一个定义的,从0开始。

反向获取枚举

可以通过valueOf()反向获取枚举值

DishType.valueOf("Fish");

枚举中定义方法

比如在枚举中定义一个sayHello方法

public void sayHello() {
        System.out.println("hello,i am " + type);
    }

然后调用

 DishType fish = DishType.valueOf("Fish");
        fish.sayHello();

枚举中的匿名内部类

枚举实例后有花括号时,该枚举实例是枚举类匿名内部之类
定义性别枚举类

package com.company.enumpackage;

public enum Gender {

    //枚举值调用对应构造器创建
    MALE("男") {
        public void info() {
            System.out.println("这个枚举代表男");
        }
    },
    FEMALE("女") {
        public void info() {
            System.out.println("这个枚举代表女");
        }
    },
    UNKNOWN("UNKNOWN");

    private final String name;

    //枚举类的构造器只能使用private修饰
    private Gender(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void info() {
        System.out.println("这是第一个用于定义性别的枚举类");
    }
}

调用

Gender male = Gender.MALE;
Gender female = Gender.FEMALE;
Gender unKnown = Gender.UNKNOWN;
male.info();
female.info();
unKnown.info();
24

评论 (0)

取消