JAVA基础知识修补 - 1 枚举类型

为什么要枚举类型?

可以将常量组织起来,统一进行管理。
常用于状态码,错误码。

本质:受限制的类 枚举类(class),枚举实例(对象)

类内使用 类内枚举

常用方法

  1. ENUM.values() 返回所有枚举值,按声明顺序返回 枚举类名.values()
  2. ENUM.valueOf(ENUM)
  3. ENUMOBJ.name()返回 具体的枚举值(对象名)
  4. ENUMOBJ.equals() :判断是否为同一个对象。可以使用 == 来比较enum实例。
  5. ENUMOBJ.ordinal() 返回实例在enum中声明的次序(类似数组index)
类内枚举(类似内部类)
    enum TYPE {value1,value2,...}; 
    
    enum GENDER {MALE,FEMALE};
    //类内遍历      ENUM.values() 返回的是个数组
    for (GENDER g : GENDER.values()) {
            System.out.println(g+ " ordinal: " + g.ordinal());
        }
     //创建实例对象
     GENDER man = GENDER.MALE;  
     man.name();   //MALE
     man.ordinal();// 0  (FEMALE实例对象 是1)
     //获取enum的类型 (GENDER)
     man.getDeclaringClass();

遍历

public class Demo {
    // 枚举颜色
    enum Color {RED, GREEN, BLUE;}
    public static void main(String args[]) {
        Color list[]   = Color.values();
        for(int i=0;i<list.length;i++)
            System.out.println(list[i]);
        for(Color c: Color.values()){
            System.out.println(c);
        }
    }
}

枚举类(单独使用)

同类一样,分为属性+方法两部分。
1.先写构造函数与必须属性,确定属性枚举值的样式

  
    private  int code;
    private  String description;
ErrorCode(int number, String description) {
        this.code = number;
        this.description = description;
    }

2.自定义属性 (逗号分割!逗号分隔!逗号分隔!分号结尾)

 OK(0, "成功"),
    ERROR_A(100, "登录成功"),
    ERROR_C(-100, "登录失败"),
    ERROR_B(200, "注册成功");

3.定义其他方法

  public int getCode() {
        return code;
    }
    
    public String getDescription() {
        return description;
    }

public static void eachPrint() { // 静态方法
        for (ErrorCode s : ErrorCode.values()) {
            System.out.println("code: " + s.getCode() + ", description: " + s.getDescription());
        }
    }

整体概览


public enum ConstantEnum {


    SUCCESS(0),   //这就是先写构造方法的用途,其实这都是实例对象(OBJ),可以定义他们自己的方法(也就是每个不同的枚举对象可以有不同的操作,只需要实现接口,override即可)
    REGISTERED(10),
    NEEDED_REGISTERED(20),
    PASSWORD_ERROR(30),
    ERROR(40),
    DB_EXISTS_ALREADY(50);

    private int statusNum;
    ConstantEnum(int value){
        this.statusNum  = value;
    }

    public int getStatusNum(){return this.statusNum;}
    
    public static void printAll(){
        for(ConstantEnum constantEnum:ConstantEnum.values()){
            System.out.println(constantEnum.ordinal()+" declaring pos:"+constantEnum );
        }
    }


}

使用枚举代替if-else

对于不同角色,有不同的操作,使用if-else当然可以解决。但是耦合性很高。
我们可以使用 接口+枚举角色实现接口功能 的方式,实现动态执行不同操作的需求。

假设男人女人不同操作,定义接口(男人女人都要操作)

public interface Operations {
    String ops();
}

然后使用枚举类实现接口

public enum Gender implements Operations {
    MALE("man"){
        @Override
        public String ops(){
            return "man go to work daylight in the past";
        }
    },
    FEMALE("woman"){
        @Override
        public String ops(){
            return "WOman go to work daylight too";
        }
    };
    private String gender;
    Gender(String sex){
        this.gender = sex;
    }
}

测试:

public class Demo {
    static Gender gender = Gender.FEMALE;
    public static void main(String args[]) {
        System.out.println(gender.ops());
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值