Java web 传参int enum_用enum 代替int (30)

1、int 枚举模式

在类型安全性和使用方便性没有任何帮助

apple_ 和orange_ 之间比较,编译器不会有任何警告报出

十分脆弱,编译枚举时常量,编译到使用他们的客户端(int关联发生变化需要重新编译)

29edce7a7bde47754fccfef8c7dddb9c.png

2、String 枚举模式

int 枚举模式变体

常量可打印(int 枚举模式打印出来就是数字),打印出来是字符串

会引来性能问题,因为依赖字符串比较

会使字符串硬编码到客户端代码中(初级编码会这样,而不是使用适当域(field)名)

如果字符串有错误,运行时才会发现,编译时不会有任何警告

3、jdk 1.5以后的新枚举

这种模式本质上是int 值

基本思想:通过公有静态 final 类为每个枚举实例导出常量

没有可以访问的构造器,枚举是真正的final 类

枚举实例是受控的,客户端不能生成枚举实例,不能扩展,只有声明过的枚举常量

d431e7ea248a94328ee6ece0fe1b756e.png

4、枚举提供了编译时的类型安全

传递错误类型会导致编译时报错

试图 == 比较时,各个常量是严格区分的

可以增加或者重新编排枚举类型代码,无需修改客户端代码(因为常量值没有被编译到客户端代码中,存在int 模式中)

5、枚举类型允许添加任意方法和域,实现任意接口

提供了所有Object 方法的高级实现,实现了Comparable 接口和 Serializable 接口

并针对枚举类型的可任意改变性,设计了序列化方式

6、方法或域添加到枚举类型中

将数据和常量关联起来(枚举常量的属性值)

可以使用适当的方法增强枚举类型(枚举类型先成为一个简单集合,慢慢演变成全功能的抽象)

如下,星球枚举类型,传入质量和半径创建常量

将数据与枚举常量关联起来,声明实例域,编写带有数据,并将数据保存在域中的构造器

枚举天生不可变,所有域都应该是final

5dc1182a22c2cd1490c5d000eddcbecf.png

7、不同行为与每个枚举常量关联起来,可以使用如下抽象方法

注意不带参数的几个常量写法

81ba0e32905608e8f6fbd2e97510a60d.png

带参数的

cb70112f8d21a2dfa1e7269b03d2cddc.png

客户端调用

6d2219f8efd624b2beea106143955b6e.png

8、枚举类型有一个自动产生的方法

valueOf 方法,将常量的名字转变为常量本身

如果在枚举类型中覆盖toString 方法,要考虑编写一个fromString 方法(实现字符串变回相应枚举)

27f565de4c65fe7e807f4ece8908da2b.png

枚举构造器不可以访问枚举的静态域,编译时常量除外(枚举不允许在其构造函数中使用静态引用)

枚举类型语法要求:仅仅私有构造方法是允许的(如下)

67fc68c209980b70b03213c2c2204525.png

9、枚举常量中共享代码更加困难

私有嵌套枚举:策略枚举

dd46277e3f0b264977a2a817f0cf486e.png

10、枚举中的switch 语句,适合给外部的枚举类型,增加特定于常量的行为

dc62a275b0e4c3dfdfa5d4534eae1f7a.png

11、枚举性能缺陷

装载和初始化时会有空间和时间成本

枚举优先使用 Comparable 而非 int常量

12、每当需要固定常量数组的时候,使用枚举

与int 相比,枚举易读、安全、功能强大

特定于常量的方法,优先启用自有值枚举

多个枚举常量共享相同的行为,考虑策略枚举

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值