java: 无法将枚举 中的构造器 adminmodule应用到给定类型_不得不说使用枚举的原因...

026994c46fa642cc7274c6eadfc370af.png

枚举和注解

1.用enum代替int常量

​ 以前的int枚举类型(public static final int APPLE_FUJI = 0)不具有安全性,也没有描述性。Int枚举是编译时常量,很难将int枚举常量转换为可打印的字符串,还有一种变体就是String类型的(淘汰) ​ 简单的枚举类型 ​ Public enum Apple{FUJI,PIPPIN,GRANNY_SMITH} ​ Java枚举本质上是int值 ​ 枚举类型是实例受控的,他们是单例(singleton)的泛型化,本质上是单元素的枚举 ​ 枚举类型保证了编译时的类型安全。 ​ 包含同名常量的多个枚举类型可以在一个系统中和平共处,因为命名空间不同。 ​ 枚举类型还允许添加任意的方法和域,并实现任意的接口。 ​ 为了将数据与枚举常量关联起来,得声明实例域,并编写一个带有数据并且将数据保存在域中的构造器。 ​ 枚举常量无法通过其构造器访问另一个构造器。 ​ 枚举中的switch语句适合于给外部的枚举类型增加特定于常量的行为。

使用枚举的场景
每当需要一组固定常量,并且在编译时就知道其成员的时候,就应该使用枚举。

​ 枚举类型中的常量类型并不一定始终不变。 ​ 如果多个(但非所有)枚举常量同时共享相同的行为,则考虑策略枚举

2.用实例域代替序数

​ 所有的枚举都有一个ordinal方法,它返回每一个枚举常量在类型中的数字位置。 ​ 永远不要根据枚举的序数导出与它关联的值,而是要将他保存在一个实例域中。

3.用EnumSet代替位域

​ 如果一个枚举类型的元素主要用在集合中,一般使用int枚举类型。 ​ Text.applyStyles(STYLE_BOLD | STYLE_ITALIC) ​ 这种表示法让你用OR位运算将几个常量合并到一个集合中,称为位域 ​ 位域表示法也允许利用位操作,有效的执行像union(联合)和intersection(交集)这样的集合运算。缺点很多。 ​ Java.uitl包提供了EnumSet类来有效的表示从单个枚举类型中提取的多个值的多个集合。 ​ 每个EnumSet内容都表示为位矢量。

4.用EnumMap代替序数索引

​ Map plantsByLifeCycle = new EnumMap<>(Plant.LifeCycle.class) ​ EnumMap构造器采用键类型的Class对象,这是一个有限制的类型令牌,提供了运行时的泛型信息。 ​ 最好不要用序数来索引数组,而要使用EnumMap

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值