在以往的switch語句中,對于case
中的類型匹配限制是很多的。比如下面這個例子中的Map
中可能存儲了不同類型的對象,我們要判斷的時候,就只能依靠if-else
來完成。
Map<String, Object> data = new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);
if (data.get("key1") instanceof String s) {
log.info(s);
}
if (data.get("key") instanceof String s) {
log.info(s);
} else if (data.get("key") instanceof Double s) {
log.info(s);
} else if (data.get("key") instanceof Integer s) {
log.info(s);
}
現(xiàn)在開始,這樣的類型判斷關(guān)系,就可以簡化為如下的switch
代碼:
switch (data.get("key1")) {
case String s -> log.info(s);
case Double d -> log.info(d.toString());
case Integer i -> log.info(i.toString());
default -> log.info("");
}
這個功能還是非常有用的,尤其是存在一些抽象封裝的時候,可能存在一些父子、兄弟等關(guān)系類的時候,為了判斷是什么類型,就不用寫很多if來處理了,代碼簡潔度可以得到進(jìn)一步的優(yōu)化。