我剛剛發現自己想要在java.util.Map中使用putIfAbsent(...)的版本,您可以提供某種工廠方法來實例化一個Object,如果它尚不存在。這會簡化很多代碼。爲什麼Java在Map中沒有putIfAbsent(key,supplier)方法?
這是我修改的接口:
import java.util.Map;
import java.util.function.Supplier;
/**
* Extension of the Map Interface for a different approach on having putIfAbsent
*
* @author Martin Braun
*/
public interface SupplierMap<K, V> extends Map<K, V> {
public default V putIfAbsent(K key, Supplier<V> supplier) {
V value = this.get(key);
if(value == null) {
this.put(key, value = supplier.get());
}
return value;
}
}
現在我的問題: 是否有這樣做的另一個(容易)的方式或有我只是忽略了Java API中的東西嗎?
FWIW,['Map#putIfAbsent'](http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#putIfAbsent-K-V-)被添加到Java8中。在Java 1.8中有 – fxm 2014-11-25 13:00:00
有V putIfAbsent(K key,V value) – 2014-11-25 13:00:29
我知道,但它只允許提供一個Object而不是一個Supplier方法。 – 2014-11-25 13:00:39