Java 优雅的java枚举类

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割

定义一个简易枚举类:

public enum YesNo1Enum {

    YES, NO;

    //颜色:RED, WHITE, GREEN;
    //星期:MON, TUE, WEN;
}

//调用
public class Test {

    public static void main(String[] args) {

        System.out.println(YesNo1Enum.YES);

    }
}

输出结果:  YES  

定义一个可以获取code值的枚举:

public enum YesNo2Enum {

    YES("1"),
    NO("0");

    private String code;

    YesNo2Enum(String code){
        this.code = code;
    }

    public String getCode(){
        return code;
    }

    public void setCode(String code){
        this.code = code;
    }
}

//调用
public class Test {

    public static void main(String[] args) {

        System.out.println(YesNo2Enum.YES);
        System.out.println(YesNo2Enum.YES.getCode());

    }
}

输出结果:  YES  

                       1     

 定义一个可以获取code值和desc的枚举:

public enum YesNo3Enum {

    YES("1","是"),
    NO("0","否");

    private String code;
    private String desc;

    YesNo3Enum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

//调用
public class Test {

    public static void main(String[] args) {

        System.out.println(YesNo3Enum.YES);
        System.out.println(YesNo3Enum.YES.getCode());
        System.out.println(YesNo3Enum.YES.getDesc());

    }
}

输出结果:    YES   

                        1      

                        是     

定义一个中文显示的枚举:

public enum YesNo4Enum {

    是("1"),
    否("0");

    private String code;

    YesNo4Enum(String code){
        this.code = code;
    }

    public String getCode(){
        return code;
    }

    public void setCode(String code){
        this.code = code;
    }

}

//调用
public class Test {

    public static void main(String[] args) {

        System.out.println(YesNo4Enum.是);
        System.out.println(YesNo4Enum.否.getCode());

    }
}

输出结果:    是    

                       0    

public enum PayEnum {

    //枚举项,采用全部大写命名
    //枚举项就是一个一个对象,它是常量,可定义枚举项的时候调用构造方法
    WEIXINPAY("weixin", "https://api.mch.weixin.qq.com/pay/"),
    ALIPAY("ali", "https://openapi.alipay.com/"),
    UNIONPAY("union", "https://gateway.95516.com/gateway/api/");

    private String name;//支付名称
    private String url;//支付地址

    PayEnum(String name, String url) {
        this.name = name;
        this.url = url;
    }

    public String getName() {
        return name;
    }

    public String getUrl() {
        return url;
    }

}

//调用
public class Test {

    public static void main(String[] args) {

        //枚举项就是一个对象(实例)
        PayEnum weixinPay = PayEnum.ALIPAY;
        System.out.println(weixinPay.getName());
        System.out.println(weixinPay.getUrl());

    }
}

输出结果:    ali    

                       https://openapi.alipay.com/    

values(), ordinal() 和 valueOf() 方法

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。
enum Color { 
    RED, GREEN, BLUE; 
} 
  
public class Test { 
    public static void main(String[] args) { 
        // 调用 values() 
        Color[] arr = Color.values(); 
  
        // 迭代枚举
        for (Color col : arr) { 
            // 查看索引
            System.out.println(col + " at index " + col.ordinal()); 
        } 
  
        // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException 
        System.out.println(Color.valueOf("RED")); 
        // System.out.println(Color.valueOf("WHITE")); 
    } 
} 

 输出结果:       RED at index 0      

                        GREEN at index 1   

                           BLUE at index 2   

                                   RED              

枚举类成员

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

enum Color { 
    RED, GREEN, BLUE; 
  
    // 构造函数
    private Color() { 
        System.out.println("Constructor called for : " + this.toString()); 
    } 
  
    public void colorInfo(){ 
        System.out.println("Universal Color"); 
    } 
} 
  
public class Test {     
    // 输出
    public static void main(String[] args) { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
        c1.colorInfo(); 
    } 
} 

输出结果            Constructor called for : RED         

                        Constructor called for : GREEN      

                           Constructor called for : BLUE      

                                             RED                           

                                    Universal Color                   

 使用 for 语句来迭代枚举元素:

enum Color { 
    RED, GREEN, BLUE; 
} 
public class MyClass { 
  public static void main(String[] args) { 
    for (Color myVar : Color.values()) {
      System.out.println(myVar);
    }
  } 
}

输出结果                  RED          

                               GREEN       

                                BLUE          

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窗台的花花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值