1700445807
1700445808
简不简单,我们来对比一下两者的定义和使用情况就知道了。先把Season枚举翻写成接口常量,代码如下:
1700445809
1700445810
interface Season{
1700445811
1700445812
int Spring=0;
1700445813
1700445814
int Summer=1;
1700445815
1700445816
int Autumn=2;
1700445817
1700445818
int Winter=3;
1700445819
1700445820
}
1700445821
1700445822
此处定义了春夏秋冬四个季节,类型都是int,这与Season枚举的排序值是相同的。首先对比一下两者的定义,枚举常量只需要定义每个枚举项,不需要定义枚举值,而接口常量(或类常量)则必须定义值,否则编译通不过,即使我们不需要关注其值是多少也必须定义;其次,虽然两者被引用的方式相同(都是“类名.属性”,如Season.Spring),但是枚举表示的是一个枚举项,字面含义是春天,而接口常量却是一个int类型,虽然其字面含义也是春天,但在运算中我们势必要关注其int值。
1700445823
1700445824
(2)枚举常量属于稳态型
1700445825
1700445826
例如,我们要给外星人描述一下地球上的春夏秋冬是什么样子的,使用接口常量应该是这样写。
1700445827
1700445828
public void describe(int s){
1700445829
1700445830
//s变量不能超越边界,校验条件
1700445831
1700445832
if(s>=0&&s<4){
1700445833
1700445834
switch(s){
1700445835
1700445836
case Season.Summer:
1700445837
1700445838
System.out.println(“Summer is very hot!”);
1700445839
1700445840
break;
1700445841
1700445842
case Season.Winter:
1700445843
1700445844
System.out.println(“Winter is very cold!”);
1700445845
1700445846
break;
1700445847
1700445848
……
1700445849
1700445850
}
1700445851
1700445852
}
1700445853
1700445854
}
1700445855
1700445856
很简单,先使用switch语句判断是哪一个常量,然后输出。但问题是我们得对输入值进行检查,确定是否越界,如果常量非常庞大,校验输入就成了一件非常麻烦的事情,但这是一个不可逃避的过程,特别是如果我们的校验条件不严格,虽然编译照样可以通过,但是运行期就会产生无法预知的后果。
[
上一页 ]
[ :1.700445807e+09 ]
[
下一页 ]