Я тестирую ConcurrentHashMap
в реализации Oracle Java 8:
ConcurrentMap<String, String> concurrentMap = new ConcurrentHashMap<>();
String result = concurrentMap.computeIfAbsent("A", k -> "B");
System.out.println(result); // "B"
result = concurrentMap.putIfAbsent("AA", "BB");
System.out.println(result); // null
Javadoc computeIfAbsent
говорит, что
Требования к реализации:
Реализация по умолчанию эквивалентна следующим шагам для этой карты, а затем возвращает текущее значение или значение null, если оно отсутствует:
if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) return map.putIfAbsent(key, newValue); }
Он сказал, что возвращает текущее значение или значение null, если оно отсутствует. Так не должно ли оно возвращаться null
? Учитывая, что putIfAbsent
также возвращает null
.
Что мне здесь не хватает?