慎用枚举型的ordinal()方法~

版权声明:这是看了Java Effective这本书的某个关于枚举的章节之后有感而发~不是原创~先来一个枚举:

public enum EnumArmyLvlType {CMD0, en_armu_lvl_type_divine,/* 1.神将 */en_armu_lvl_type_outstanding, /* 2.卓越 */en_armu_lvl_type_elite,/* 3.精英 */CMD4, CMD5,en_armu_lvl_type_normal,/* 6.普通 */;

这是一个简单枚举型,代表怪物的品质等级。

有时候呢,我们需要把数据传递出去,比如,从Android客户端发送数据给C++服务端,我们不可能把枚举变量直接传出去吧?~这样太不可爱了~

于是乎呢,聪明的我,正常情况下会这么做:

int iArmyLvlType = EnumArmyLvlType.en_armu_lvl_type_outstanding.ordinal();

这是没错吖,挺好的~可是,这样不安全~

为什么呢?因为ordinal方法不是专门给我们用来做对应关系的吖,它仅仅是枚举变量的一个序号而已。

道理很简单的,就好比…我比不出来

总之嘛,这样做不专业~虽然这么做也不能说是错的。

就好比…就好比…你们自己理解,我不比了我们不能耍小聪明~ordinal()方法得到的就是一个序号,仅仅是一个序号,不准拿来做对应关系~

呐,大家别骂我先喇~看看下面的这个做法,是不是心情舒服了很多?~

这是利用了枚举类的构造器,这样就能指定枚举变量对应的数值是多少了~

public enum EnumArmyLvlType {/* 发现这里有什么不一样了么?没有了"CMD," 这些滥竽充数的变量了,多了(1)这样的东西,就是构造函数 */en_armu_lvl_type_divine(1),/* 1.神将 */en_armu_lvl_type_outstanding(2), /* 2.卓越 */en_armu_lvl_type_elite(3),/* 3.精英 */en_armu_lvl_type_normal(6),/* 6.普通 */;private int iNum = 0;/* 构造器,记住喇,必须是私有的~ */private EnumArmyLvlType(int iNum) { this.iNum = iNum;}/* 用这个方法代替ordinal()方法,安全,专业,包退包换~ */public int toNumber() { return this.iNum;}}

怎么样?看出来了么?这样我们就可以这样转换了:

int iArmyLvlType = EnumArmyLvlType.en_armu_lvl_type_outstanding.toNumer();这样,toNumber()函数就是专门用来做对应关系的,这就是专职,专业,无副作用,欢迎尝试~关于枚举型构造器的知识,要自己去百度~不准问我~PS:

也许有人会说,为什么要这么麻烦?为什么en_armu_lvl_type_normal(6), /* 6.普通 */ 对应的数字是6?直接改成4不就好了,根本就不会有什么麻烦,这样就可以方便地使用ordinal方法~!

这个,你听我解释,不是这样的,你听我解释..老婆,求求你听我解释,这只是一个误会…

不好意思,太入戏了。

其实原因是这样的,这样做是为了扩展,也是为了方便服务器。

具体原因我不太清楚,总之,做服务器的程序员告诉我,预留一些空位,,这样他可以方便管理。

当一个人把寂寞当作人生预约的美丽,

慎用枚举型的ordinal()方法~

相关文章:

你感兴趣的文章:

标签云: