打字猴:1.700445841e+09
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语句判断是哪一个常量,然后输出。但问题是我们得对输入值进行检查,确定是否越界,如果常量非常庞大,校验输入就成了一件非常麻烦的事情,但这是一个不可逃避的过程,特别是如果我们的校验条件不严格,虽然编译照样可以通过,但是运行期就会产生无法预知的后果。
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()){
[ 上一页 ]  [ :1.700445841e+09 ]  [ 下一页 ]