用枚举实现接口,可扩展枚举。

本文探讨了一种在项目中罕见的使用方式,即通过继承和接口结合实现枚举,挑战了代码简洁原则。作者认为虽然不常见,但仍值得审视Enum的安全性和灵活性。讨论了`EnumImplInterface`示例中的`BasicOperation`和`ExtendedOperation`应用及其实现。
摘要由CSDN通过智能技术生成

才疏学浅,目前为止没见过谁在项目中这样写代码,应该是违反代码简洁易懂的原则的,Enum应该保持他绝对不变,安全的特性,但不用,不代表不该看。(本文内容摘自Effective Java 第六章38条)

public class EnumImplInterface {
    public static void main(String[] args) {
        test(BasicOperation.class,15,8);
        test(ExtendedOperation.class,15,8);
        System.out.println("枚举中的加法:"+BasicOperation.valueOf("PLUS").apply(15, 8));
    }

    private  static <T extends Enum<T> & Operation> void test(Class<T> opEnumType, double x, double y){
        for (Operation operation : opEnumType.getEnumConstants()) {
            System.out.println(opEnumType.getName()+":"+operation.apply(x,y));
        }
    }
}

interface Operation{
    double apply(double x, double y);
}
enum BasicOperation implements Operation {
    PLUS("+"){
        @Override
        public double apply(double x, double y) {
            return x + y;
        }
    },
    MINUS("-"){
        @Override
        public double apply(double x, double y) {
            return x - y;
        }
    };
    BasicOperation(String s) {
    }
}

enum ExtendedOperation implements Operation {
    EXP("^"){
        @Override
        public double apply(double x, double y) {
            return x % y;
        }
    };
    ExtendedOperation(String s) {
    }
}

<T extends Enum<T> & Operation> 确保了Class对象 既表示枚举又表示Operation的子类型。

输出结果:

第六章枚举和注解.BasicOperation:23.0
第六章枚举和注解.BasicOperation:7.0
第六章枚举和注解.ExtendedOperation:7.0
枚举中的加法:23.0

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值