日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

提高你的Java代码质量吧:使用valueof前必须进行校验

發布時間:2023/11/30 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 提高你的Java代码质量吧:使用valueof前必须进行校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、分析?

每個枚舉都是java.lang.Enum的子類,都可以訪問Enum類提供的方法,比如hashCode、name、valueOf等,其中valueOf方法會把一個String類型的名稱轉變成枚舉項,也就是在枚舉項中查找字面值和該參數相等的枚舉項。?

我們來深入分析一下該valueOf方法的源代碼?

?

public static <T extends Enum<T>> T valueof(Class<T> enumType,String name){ //通過反射,從常量列表中查找 T result = enmuType.enumConstantDirector().get(name); if(result != null) return result; if(name == null) throw new NullPointerException("Name is null"); //最后排除無效參數異常 throw new IllegalArgumentException("No enum const" + enumType + "." + name); }

?

valudOf方法通過反射從枚舉類的常量聲明中查找,若找到就直接返回,若找不到則拋出無效參數異常。valueOf的本意是保護編碼的枚舉安全性,使其不產生空枚舉對象,簡化枚舉操作,但是卻又引入了一個我們無法避免的IllegalArgumentException異常。?

二、場景?

我們來看如下代碼?

?

public static void main(String[] args){ //注意summer是小寫 List<String> params = Arrays.asList("Spring","summer"); for(String name:params){ //查找字面值與name相同的枚舉項 Season s = Season.valueOf(name); if(s != null){ //有枚舉項時 System.out.println(s); }else{ //沒有枚舉項 System.out.println("沒有相關枚舉項"); } } }

?

summer無法轉換Season枚舉,根據上面的分析,就會拋出IllegalArgumentException異常,一旦拋出異常,后續的代碼就不運行了!!!?

這與我們的習慣很不一致,例如我們從一個List中查找一個元素,即使不存在也不會報錯,頂多返回indexOf方法返回-1。?

三、建議?

1.使用try-catch捕捉異常?

?

try{ Season s = Season.valueOf(name); //有該枚舉項時處理 System.out.println("s"); }catch(Exception e){ System.out.println("無相關枚舉項"); }

?

2.擴展枚舉類?

由于Enum類定義的方法都是final類型的,所以不希望被覆寫,我們可以通過增加一個contains方法來判斷是否包含指定的枚舉項,然后在繼續轉換,代碼如下:?

?

enum Season{ Spring,Summer,Autumn,Winter; //是否包含枚舉項 public static boolean contains(String name){ //所有的枚舉值 Season[] season = values(); //遍歷查找 for(Season s : season){ if(s.name().equals(name)){ return true; } } return false; } }

?

?

轉載于:https://www.cnblogs.com/suncoolcat/p/3320040.html

總結

以上是生活随笔為你收集整理的提高你的Java代码质量吧:使用valueof前必须进行校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。