Effective Java之枚举和注解 总结

版权声明:https://blog.csdn.net/qq_26814945 https://blog.csdn.net/qq_26814945/article/details/88079022

第30条 用enum代替int常量
枚举类型为类型安全的枚举模式
为了将数据与枚举常量关联起来 得声明实例域 并编写一个带有数据并将数据保存在域中的构造器
枚举中的switch语句适合于给外部的枚举类型增加特定于常量的行为
与int常量相比 枚举类型的优势是不言而喻的 枚举要易读得多 也更加安全 功能更加强大 许多枚举都不需要显示的构造器或者成员 但许多其他枚举则受益于 每个常量与属性的关联 以及 提供行为受这个属性影响的方法 只有极少数的枚举受益于将多种行为与单个方法关联 在这种相对少见的情况下 特定于常量的方法要优先于启用自有值得枚举 如果多个枚举常量同时共享相同的行为 则考虑策略枚举

第31条 用实例域代替序数
永远不要根据枚举的序数导出与它关联的值 而是要将它保存在一个实例域中

第32条 用EnumSet代替位域
正是因为枚举类型要用在集合(Set)中 所以没有理由用位域来表示它

第33条 用EnumMap代替序数索引
最好不要用序数来索引数组 而要使用EnumMap 如果你所表示的这种关系是多维的 就使用EnumMap<…, EnumMap<…>>

第34条 用接口模拟可伸缩的枚举
虽然无法编写可扩展的枚举类型 却可以通过编写接口以及实现该接口的基础枚举类型 对它进行模拟 这样允许客户端编写自己的枚举来实现接口 如果API是根据接口编写的 那么在可以使用基础枚举类型的任何地方 也都可以使用这些枚举

第35条 注解优先于命名模式
大多数程序员都不必定义注解类型 但是所有的程序员都应该使用Java平台所提供的预定义的注解类型

第36条 坚持使用Override注解
应该在你想要覆盖超类声明的每个方法声明中使用Override注解

第37条 用标记接口定义类型
标记接口定义的类型是由被标记类的实例实现的 标记注解则没有定义这样的类型
如果你发现自己在编写的是目标为ElementType.TYPE的标记注解类型 就要花点时间考虑清楚 它是否真的应该为注解类型 想想标记接口是否会更加合适呢

猜你喜欢

转载自blog.csdn.net/qq_26814945/article/details/88079022