1700445857
1700445858
我们再来看看枚举常量是否能够避免校验问题,代码如下:
1700445859
1700445860
public void describe(Season s){
1700445861
1700445862
switch(s){
1700445863
1700445864
case Summer:
1700445865
1700445866
System.out.println(Season.Summer+“is very hot”);
1700445867
1700445868
break;
1700445869
1700445870
case Winter:
1700445871
1700445872
System.out.println(Season.Winter+“is very cold”);
1700445873
1700445874
break;
1700445875
1700445876
……
1700445877
1700445878
}
1700445879
1700445880
}
1700445881
1700445882
不用校验,已经限定了是Season枚举,所以只能是Season类的四个实例,即春夏秋冬4个枚举项,想输入一个int类型或其他类型?门都没有!这也是我们最看重枚举的地方:在编译期间限定类型,不允许发生越界的情况。
1700445883
1700445884
(3)枚举具有内置方法
1700445885
1700445886
有一个很简单的问题:如果要列出所有的季节常量,如何实现呢?接口常量或类常量可以通过反射来实现,这没错,只是虽然能实现,但会非常繁琐,读者有兴趣可以自己写一个反射类实现此功能(当然,一个一个地手动打印输出常量,也可以算是列出)。对于此类问题,使用枚举就可以非常简单地解决,代码如下:
1700445887
1700445888
public static void main(String[]args){
1700445889
1700445890
for(Season s:Season.values()){
1700445891
1700445892
System.out.println(s);
1700445893
1700445894
}
1700445895
1700445896
}
1700445897
1700445898
通过values方法获得所有的枚举项,然后打印出来即可。如此简单,得益于枚举内置的方法,每个枚举都是java.lang.Enum的子类,该基类提供了诸如获得排序值的ordinal方法、compareTo比较方法等,大大简化了常量的访问。
1700445899
1700445900
(4)枚举可以自定义方法
1700445901
1700445902
这一点似乎并不是枚举的优点,类常量也可以有自己的方法呀,但关键是枚举常量不仅可以定义静态方法,还可以定义非静态方法,而且还能够从根本上杜绝常量类被实例化。比如我们要在常量定义中获得最舒服季节的方法,使用常量枚举的代码如下所示:
1700445903
1700445904
enum Season{
1700445905
1700445906
Spring, Summer, Autumn, Winter;
[
上一页 ]
[ :1.700445857e+09 ]
[
下一页 ]