深入理解java枚举

基本使用

演示代码:

enum ComputeEnum{

    PLUS("加"){
        @Override
        public long compute(long a, long b){
            return a + b;
        }
    },
    SUBTRACT("减"){
        @Override
        public long compute(long a, long b){
            return a - b;
        }
    },
    MULTIPLY("乘"){
        @Override
        public long compute(long a, long b){
            return a * b;
        }
    },
    DIVIDE("除"){
        @Override
        public long compute(long a, long b){
            return a / b;
        }
    },
    ;

    ComputeEnum(String desc){
        this.desc = desc;
    }

    private final String desc;

    public abstract long compute(long a, long b);
}

通过查询资料发现,所有的枚举都继承自java.lang.Enum这个类:public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {...},通过阅读源码,发现该类就本质就是一个抽象类。

下面的模拟伪代码是更加直观的剖析:

abstract class ComputeEnum{
    
    public static final ComputeEnum PLUS= new ComputeEnum() {
        @Override
        void method() {
            System.out.println("抽象方法");
        }
    };
    
    public static final ComputeEnum SUBTRACT= new ComputeEnum() {
        @Override
        void method() {
            System.out.println("抽象方法");
        }
    };
    
    abstract void method();
}

Enum的扩展

枚举可以被看成是一个普通类,只是多了一些特性:无法被继承。简易计算器实现了基本的加减乘除操作,但是如果未来需要添加新的计算操作,比如:取余、乘方等等操作,那么就需要在原有的枚举中添加新的实例,这就违背了开闭原则。比较好的做法是将枚举中的计算函数抽离出去成一个接口,让枚举实现该接口,让客户端依赖于该计算接口,而不是依赖于实现,这样客户端所依赖的是一个稳定的接口,可以动态根据不同场景的实现不动的计算。

演示代码:

interface Operation{
    long compute(long  a, long b);
}

enum BaseComputeEnum implements Operation{

    PLUS("加"){
        @Override
        public long compute(long a, long b){
            return a + b;
        }
    },
    SUBTRACT("减"){
        @Override
        public long compute(long a, long b){
            return a - b;
        }

    },
    MULTIPLY("乘"){
        @Override
        public long compute(long a, long b){
            return a * b;
        }
    },
    DIVIDE("除"){
        @Override
        public long compute(long a, long b){
            return a / b;
        }
    },
    ;

    BaseComputeEnum(String desc){
        this.desc = desc;
    }

    private final String desc;
}

enum ExtendComputeEnum implements Operation{

    MOD("取模"){
        @Override
        public long compute(long a, long b){
            return a % b;
        }
    },
    ;

    ExtendComputeEnum(String desc){
        this.desc = desc;
    }

    private final String desc;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值