【发布时间】:2018-01-18 00:55:18
【问题描述】:
我正在使用此代码:
A a = aMap.contains(key) ? aMap.get(key) : createAExpensively(key);
我相信 Java 是惰性的,所以如果 aMap.contains(key)) 则永远不会调用 createAExpensively() 函数。
然后,我偶然发现了Map.getOrDefault() 方法。如果我们改为使用:
A a = aMap.getOrDefault(key, createAExpensively(key));
Java 还懒得调用createAExpensively() 函数吗?
Java 似乎会首先创建对象A 并将其作为方法参数传递,基于this question,但我并不完全确定。
如果 Java 在使用 Map.getOrDefault() 时并不懒惰,那么该方法的意义何在?
【问题讨论】:
标签: java lazy-evaluation lazy-initialization short-circuiting