【发布时间】:2022-03-11 05:46:15
【问题描述】:
Map<String, Integer> iMap = new HashMap<>();
iMap.put("a", 1);
Integer a = iMap.getOrDefault("a", getNum());
private Integer getNum() {
System.out.println("getNum Method has been invoked");
return 123;
}
output: getNum Method has been invoked
iMap 有键“a”,为什么 getNum 仍然被调用?
【问题讨论】:
-
这是一个有限的设计,因为 Java 没有惰性求值。仅当参数是文字值时才使用该方法。您可以编写自己的
getOrDefault(T,Supplier)或使用第 3 方库。如果您还想同时更新值,请使用computeIfAbsent