java枚举详解

一,基本enum特性
1,values()返回enum实例的数组,而且该数组的元素保持其在enum中声明时的顺序。
2,枚举类型允许添加任意的方法和域,这样就可以为每个枚举实例添加详细描述。为此,我们可以提供一个构造器,专门负责处理这个信息。
注意:如果打算定义自己的方法,那么必须在enum实例序列的最后一个添加分号。同时,java要求必须先定义enum实例。
举例代码如下

@Getter
@Setter
public enum ErrorCode {
    ERROR_CODE1(1,"信息错误"),
    ERROR_CODE2(2,"来源错误");
    private int code;
    private String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
}

三,使用接口组织枚举
我们是无法从enum继承子类。对于enum而言,实现接口是使其子类化的唯一办法。
effectice java中的示例如下

public enum ExtendOperation implements Operation{
    PLUS("+"){
        public double apply(double x,double y){
            return x+y;
        }
    },
    MINUS("-"){
        public double apply(double x,double y){
            return x-y;
        }
    };
    private String symbol;
    ExtendOperation(String symbol) {
        this.symbol = symbol;
    }
}

public class Test {
    public static void main(String[] args) {
        double x = Double.parseDouble("1");
        double y = Double.parseDouble("2");
        test(Arrays.asList(ExtendOperation.values()),x,y);
    }

    private static void test(Collection<? extends Operation> opSet, double x, double y) {
        for(Operation op : opSet){
            System.out.println(op.apply(x,y));
        }
    }
}

四,使用EnumSet替代标志
EnumSet的出现是为了替代传统的基于"int"的位标志。EnumSet集位域的简洁和性能优势于一身。示例如下

 public class Text {
    public enum Style{
        BOLD,ITALIC,UNDERLINE
    }
    public void applyStyles(Set<Style> styles){
        
    }
}
text.applyStyles(EnumSet.of(Style.OLE,Style.ITALIC));

五,使用EnumMap
EnumMap是一种特殊的Map,它要求其中的key必须来自一个enum.EnumMap内部由数组实现,所以查找速度很快。
六,常量相关方法
常量相关的方法,我们为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法。通过常量相关方法,每个enum实例可以具备自己独特的行为。每个enum实例就相当于一个独特的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值