Java 16 新特性:instanceof增強

語言: CN / TW / HK

instanceof 這個關鍵詞,主要用來判斷某個物件是不是某個類的例項。

比如,有時候我們要處理一個類似這樣的資料集:

Map<String, Object> data = new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);

這個Map中的Value值因為可能是不同的物件,所以定義的是Object。這個時候,當我們get出來的時候,就需要去判斷和轉換之後再去處理。

比如,我們取出 key1value ,然後擷取一段字串的操作,就需要這樣寫:

Object value  =data.get("key1");
if (value instanceof String) {
  String s = (String) value;
  System.out.println(s.substring(1));
}

先判斷獲取的value是否是String,再做強制型別轉換,然後再對字串進行操作。這是傳統的寫法,而在Java 16的增強之後,對於 instanceof 的判斷以及型別轉換可以合二為一了,所以改進後的寫法可以如下:

Object value  =data.get("key1");
if (value instanceof String s) {
  System.out.println(s.substring(1));
}

是不是簡單不少呢?如果沒用過的話,趕緊操作試試看吧!

Tips:該功能經歷了2個Preview版本(JDK 14中的JEP 305、JDK 15中的JEP 375),最終定稿於JDK 16中的JEP 394。

如果您學習過程中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!另外,不要走開,關注我!持續更新Java新特性專欄!