当前位置 > it书童 > java > 正文

java 枚举类进阶

java it书童 2020-11-29 17:04:44 0赞 0踩 1063阅读 0评论

枚举类也是一种类,只是它是一种比较特殊的类,因此它一样可以定义成员变量、方法和构造器

定义一个枚举类

public enum  Gender {
    MALE, FEMALE;
    // 定义一个 public 修饰的实例变量
    public String name;
}

调用枚举类

public static void main(String[] args) {
    // 获取指定枚举类的枚举值
    Gender g = Enum.valueOf(Gender.class, "FEMALE");
    g.name = "女";
    System.out.println(g + "代表:" + g.name);
}

使用Gender枚举类时与使用一个普通类没有太大的差别,差别只是产生Gender对象的方式不同,枚举类的实例只能是枚举值,而不是随意地通过new来创建枚举类对象

源码 javaDemo c8f1e40

枚举类通常应该设计成不可变类,也就是说,它的成员变量值不应该允许改变,这样会更安全,而且代码更加简洁。因此建议将枚举类的成员变量都使用private final修饰

如果将所有的成员变量都使用了final修饰符来修饰,所以必须在构造器里为这些成员变量指定初始值

一旦为枚举类显式定义了带参数的构造器,列出枚举值时就必须对应地传入参数

因此,代码改造为:

public enum  Gender {
    MALE("男"), FEMALE("女");

    private final String name;

    Gender(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

调用:

public class GenderTest {
    public static void main(String[] args) {
        // 获取指定枚举类的枚举值
        Gender g = Enum.valueOf(Gender.class, "FEMALE");
        System.out.println(g + "代表:" + g.getName());
    }
}

实质上:

MALE("男"), FEMALE("女");

等同于:

public static final Gender MALE = new Gender("男");
public static final Gender FEMALE = new Gender("女");

源码 javaDemo 77c52fa

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/913