目录
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;
}
}