在以往的switch語(yǔ)句中,對(duì)于case
中的類型匹配限制是很多的。比如下面這個(gè)例子中的Map
中可能存儲(chǔ)了不同類型的對(duì)象,我們要判斷的時(shí)候,就只能依靠if-else
來(lái)完成。
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)在開(kāi)始,這樣的類型判斷關(guān)系,就可以簡(jiǎ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("");
}
這個(gè)功能還是非常有用的,尤其是存在一些抽象封裝的時(shí)候,可能存在一些父子、兄弟等關(guān)系類的時(shí)候,為了判斷是什么類型,就不用寫(xiě)很多if來(lái)處理了,代碼簡(jiǎn)潔度可以得到進(jìn)一步的優(yōu)化。