首页 > 编程知识 正文

java枚举类根据key获取value,java枚举类型enum定义

时间:2023-05-03 10:11:53 阅读:189094 作者:4347

文章目录 1 枚举类介绍2 自定义枚举类3 通过enum定义枚举类4 枚举类实现接口5 抽象枚举类

1 枚举类介绍

对于对象有限且固定的类,使用枚举类。 特别是定义一组常量是,强烈建议使用枚举类。

如:

星期:Monday, Tuesday, …, Sunday季节:Spring, summer, autumn, winter性别:male, female 2 自定义枚举类

jdk5.0之前,枚举类需要自己定义。因为枚举类用于对象有限且固定的情况,所以自己定义的枚举类一般建议:

构造方法私有private,防止构造新的对象。枚举值要调用对应的构造器来创建枚举类的成员声明为 private final枚举类的对象成员声明为 public static final

简单的例子:

/** * Gender枚举类,对性别进行枚举 */class Gender { // 属性声明 private final String name; private final String describe; // 私有化构造器 private Gender(String name, String describe) { this.name = name; this.describe = describe; } // 实例化枚举类能提供的有限个对象 public static final Gender MAN = new Gender("man", "Gender: man"); public static final Gender WOMAN = new Gender("woman", "Gender: woman"); // 如果有必要,可以提供get方法获取属性信息 public String getName() { return name; } public String getDescribe() { return describe; } } 3 通过enum定义枚举类

使用enum关键字定义枚举类。(enum关键字和class、interface的作用相似)

enum Gender2 { // 首行列出所有枚举对象,直接 `对象名(构造方法参数)` ,对象之间用 `,` 隔开 MAN("man", "gender: man"), // public static final Gender2 MAN = new Gender2("man", "gender: man") WOMAN("woman", "gender: man"); // 属性声明 private final String name; private final String describe; // 私有化构造器 private Gender2(String name, String describe) { this.name = name; this.describe = describe; } // 如果有必要,可以提供get方法获取属性信息 public String getName() { return name; } public String getDescribe() { return describe; }} 枚举类注意事项: 枚举类默认继承java.lang.Enum类。

java.lang.Enum类常用方法
  Enum类的常用方法,可以由用户自己定义的枚举类使用。(继承)

values():返回枚举类型的对象数组valueOf(String str):将str字符串转化为同名的枚举类对象toString():返回当前枚举类对象的名称 非抽象枚举类默认使用final修饰,不能派生子类。

注意:

枚举类的实例通过类名.实例名调用。switch的控制表达式可以是任何枚举类型,case表达式的值可以直接用枚举对象的名字,不需要添加枚举类作为限定。 Gender2 b = Gender2.MAN;switch (b) {case MAN: System.out.println("man");break; case WOMAN: System.out.println("woman");break;} 4 枚举类实现接口

  枚举类可以和普通类一样实现接口,但这种实现使得每个枚举实例的接口实现方法都一样。若要为每个枚举值提供不同实现方式,参照匿名对象实现:

//接口public interface GenderDesc{ void info();} //枚举类实现接口public enum Gender implements GenderDesc{ MALE("男"){ public void info(){ System.out.println("这个枚举值代表男性"); } }, FEMALE("女"){ public void info(){ System.out.println("这个枚举值代表女性"); } }; private final String name; private Gender(String name){ this.name=name; }}

注意:此时的枚举值不是Gender枚举类的实例,而是Gender的匿名子类的实例。

5 抽象枚举类 枚举类中有抽象方法时,系统自动为其添加abstract关键字,不能手动添加。枚举值中要重写枚举类的抽象方法。 package org.ywq.absenumclass;public enum Operation {ADD {public double oper(double x, double y) {return x + y;}},SUB {public double oper(double x, double y) {return x - y;}},MUL {public double oper(double x, double y) {return x * y;}},DIV {public double oper(double x, double y) {return y == 0 ? y : x / y;}};// 抽象方法public abstract double oper(double x, double y);public static void main(String[] args) {System.out.println(Operation.ADD.oper(1.2, 2.1));System.out.println(Operation.SUB.oper(1.2, 2.1));System.out.println(Operation.MUL.oper(1.2, 2.1));System.out.println(Operation.DIV.oper(1.2, 2.1));}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。