
已解决问题
谷歌rong168168用户在2021.11.05提交了关于“龙应台e**m在j**a中是什么意思”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-12T02:54:04。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !
详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !
E**m类型
觅类型(E**meratedType)很
举个例子来说明一下,如果希望为彩虹描
清单1.常量定义
PublicstaticclassRainbo
类型不安全
由于颜色常量的对应值是整数形,
没有命
由于颜色常量只是类的属性,当你使
一致性差
因为整形觅属于
类型无指意性
由
如何定义E**m类型
为了改
e**mRainbowCol
回到本文的主题上来,引入觅类型到底能够给我们开发带来什么样好处呢?一个最直接的益处就是扩大switch语句使用范围。5.0之前,J**a中switch的值只能够是简单类型,比如int、byte、short、char,有了觅类型之后,就可以使用对象了。这样一来,程序的控制选择就变得更加的方便,看下面的例子:
清单2.定义E**m类型
//定义一周七天的觅类型
如何定制E**m类型
除了以上这种最常见的觅定义形式外,如果需要给觅类型增加一些复杂功能,也可以通过类似class的定义来给觅进行定制。比如要给e**m类型增加属性,可以像下面这样定义:
清单3.定制觅类型
//定义RSS(ReallySimpleSyndication)种子的觅类型
如何避免错误使用E**m
不过在使用E**m时候有几个地方需要注意:
e**m类型不支持public和protected修饰符的构造方法,因此构造函数一定要是private或friendly的。也正因为如此,所以觅对象是无法在程序中通过直接调用其构造方法来初始化的。
定义e**m类型时候,如果是简单类型,那么最后一个觅值后不用跟任何一个符号;但如果有定制方法,那么最后一个觅值与后面代码要用分号';'隔开,不能用逗号或空格。
由于e**m类型的值实际上是通过运行期构造出对象来表示的,所以在cluster环境下,每个虚拟机都会构造出一个同义的觅对象。因而在做比较操作时候就需要注意,如果直接通过使用等号(‘==’)操作符,这些看似一样的觅值一定不相等,因为这不是同一个对象实例。
看下面的这个例子:
清单4.避免错误使用E**m示例
//定义一个一周七天的觅类型
clientFridaye**mvalueissameasserver's
通过程序执行结果,我们能够发现在分布式条件下客户端和服务端的虚拟机上都生成了一个觅对象,即使看起来一样的Fri觅值,如果使用等号‘==’进行比较的话会出现不等的情况。而switch语句则是通过equal方法来比较觅对象的值,因此当你的觅对象较复杂时候,你就需要小心override与比较相关的方法,防止出现值比较方面的错误。
E**m相关工具类
JDK5.0中在增加E**m类的同时,也增加了两个工具类E**mSet和E**mMap,这两个类都放在j**a.util包中。E**mSet是一个针对觅类型的高性能的Set接口实现。E**mSet中装入的所有觅对象都必须是同一种类型,在其**,是通过bit-vector来实现,也就是通过一个long型数。E**mSet支持在觅类型的所有值的某个范围中进行迭代。回到上面日期觅的例子上:
e**mWeekDayE**m{Mon,Tue,Wed,Thu,Fri,Sat,Sun}你能够在每周七天日期中进行迭代,E**mSet类提供一个静态方法range让迭代很容易完成:
for(WeekDayE**mday:E**mSet.range(WeekDayE**m.Mon,WeekDayE**m.Fri)){
Mon
E**mSetsubset=E**mSet.of(WeekDayE**m.Mon,WeekDayE**m.Wed);
Mon
清单5.E**mMap示例
//定义一个E**mMap对象,映射表主键是日期觅类型,值是颜色觅类型
清单6.运行结果
Whatistheluckycolortoday?
结束语
E**m类型提出给J**A编程带了了极大的便利,让程序的控制更加的容易,也不容易出现错误。所以在遇到需要控制程序流程时候,可以多想想是否可以利用e**m来实现。