用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子

  • 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱
  • 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展
  • 可伸缩性会导致设计和实现变得复杂起来

2、可伸缩枚举类型举例,至少有一种具有说服力的例子(操作码,30条)

  • 让API的用户提供自己的操作,有效扩展API 提供的操作集

54f1e489736bdad770133a13682263253e3.jpg

  • 客户端可面向接口调用

872894547f9fa45c1999642e8b2b599acd5.jpg

  • <T extend Enum<T> & Operation>  增强枚举
  • <T extends Enum<T> & OperationInter> 这个复杂的泛型不仅保证Class既是枚举类型而且也是OperationInter的子类
  • 或者使用有限制的通配符类型,如下

3a7160dffdbe4a3405df8bb0b3ac994db27.jpg

  • 这样更加灵活,允许调用者将多个实现类型的操作合并在一起
  • 除非需要灵活实现多个实现类型,最好使用有限制的通配符类型

3、用接口实现可伸缩枚举有个小小的不足

  • 无法实现从一个枚举类型继承到另一个枚举类型
  • 可以将其封装在一个辅助类或者静态辅助方法中,避免代码的复制工作

4、总结

  • 虽然无法编写可扩展枚举类型,却可以通过编写接口以及实现该接口的基础枚举类型进行模拟

转载于:https://my.oschina.net/u/3847203/blog/1835320

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值