【Java-Enum】Java枚举类Enum相关

目录

1 枚举类的简单使用

2. enum枚举类型根据构造参数A获取构造参数B或具体枚举实例


1 枚举类的简单使用

参考:https://blog.csdn.net/cauchy6317/article/details/82313088    @JAVA枚举类型(Enum)的使用
参考:https://blog.csdn.net/qq_33945246/article/details/91043605    @Java面试知识点(二十九)Java枚举类enum

在实际生活中有些类的实例对象是固定的。例如季节(春夏秋冬)、性别(男女中)、太阳系行星(水金地火木土天海)等等。如果创建了一个Season类,我们当然有需要维护这个类的实例对象只能是春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)这四个。这个时候就体现出枚举类的作用了,Java中枚举类型就是针对这样的场景需求所设计的。

enum 和 class、interface 的地位一样。
枚举(enum)类型是 Java 5 新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断。
枚举(enum)类型全部都以类型安全(类型安全的代码不会试图访问自己没被授权的内存区域)的形式来表示。
使用 enum 定义的枚举类默认继承了 java.lang.Enum,而不是继承 Object 类。枚举类可以实现一个或多个接口
使用 enum 定义、非抽象的枚举类默认使用 final 修饰,不可以被继承
枚举(enum)类型的构造器只能是私有的
枚举类的所有实例都必须放在第一行,不需使用 new 关键字,不需显式调用构造器。自动添加 public static final 修饰。

/**
 * 太阳系八大行星枚举类
 * 根据Java的规范,枚举类的后缀建议为Enum,枚举类型的实例对象建议全大写
 */
public enum PlanetEnum {
    MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE
}

枚举类的简单使用:

// 初始化
private void initEnum() {
    // 【初始化方式1】通过PlanetEnum.valueOf(),获取指定字符串的枚举常数
    PlanetEnum enumMars = PlanetEnum.valueOf("MARS");
    // 【初始化方式2】直接初始化
    PlanetEnum enumJupiter = PlanetEnum.JUPITER;
}
// 引用
private void classifyPlanet(PlanetEnum planetEnum) {
    switch (planetEnum) {
        case MERCURY:
        case VENUS:
        case EARTH:
        case MARS:
            System.out.println("近日行星:" + planetEnum.name());
            break;
        case JUPITER:
        case SATURN:
        case URANUS:
        case NEPTUNE:
            System.out.println("远日行星:" + planetEnum.toString());
            break;
    }
}

创建枚举类,利用switch语句进行匹配从而得到相应的输出值。其功能与定义一个常量类相似。

构造函数不为空的枚举类:

public enum PlanetEnum {
    // 枚举类型:枚举类的实例对象必须在最前面先定义,且必须为每个实例对象都必须维护上定义的成员变量(参数)
    MERCURY("水星"), VENUS("金星"), EARTH("地球"), MARS("火星"), JUPITER("木星"), SATURN("土星"), URANUS("天王星"), NEPTUNE("海王星");

    // 枚举类成员变量
    private String planetName;        // 可以用final修饰,设置为不可变量,下同
    private int order;

    // 枚举类自定义构造方法:枚举类型的构造函数默认为private,枚举类型的初始化要在当前枚举类中完成。
    PlanetEnum(String name) {
        this.planetName = name;
    }

    // 枚举类对外方法
    public String getPlanetName() {
        return planetName;
    }
}

实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。

构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的成员变量(Field)不应该被改变,这样会更安全,而且代码更加简洁。所以我们应该将其成员变量(Field)用 private final 修饰。

这样可以直接在类外调用该枚举类的对外方法:

    public void test() {
        PlanetEnum planetEnum = PlanetEnum.MERCURY;
        // 可以直接调用枚举类对象的公共方法
        System.out.println(planetEnum.getPlanetName());
    }

更多用法参考:https://blog.csdn.net/qq_27093465/article/details/52180865    #Java 枚举(enum) 详解7种常见的用法#

 

2. enum枚举类型根据构造参数A获取构造参数B或具体枚举实例

参考:https://blog.csdn.net/Tiglle/article/details/82529571    @java的枚举enum根据code获取name等

public enum PlanetEnum {
    // 枚举类型:这里使用带两个参数的构造函数
    MERCURY(1, "水星"), VENUS(2, "金星"), EARTH(3, "地球"), MARS(4, "火星"), JUPITER(5, "木星"), SATURN(6, "土星"), URANUS(7, "天王星"), NEPTUNE(8, "海王星");

    // 枚举类成员变量
    private String planetName;
    private int code;

    // 枚举类自定义构造方法:这里使用带两个参数的构造函数
    PlanetEnum(int order, String name) {
        this.planetName = name;
        this.code = order;
    }

    // 枚举类对外实例方法
    public String getPlanetName() {
        return planetName;
    }
    public int getCode() {
        return code;
    }

    // 枚举类对外静态方法
    /**
     * 根据枚举类的某个成员变量(参数)来反推该枚举具体实例
     *
     * @param param 来反推枚举类型的指定实例的成员变量
     * @return 返回符合该实例成员参数的指定实例
     */
    public static PlanetEnum getEnumViaParam(String param) {
        for (PlanetEnum planetEnum : PlanetEnum.values()) {
            if (param.equals(planetEnum.getPlanetName())) {
                return planetEnum;
            }
        }
        return null;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值