<p>我修改了</p>
<pre><code>DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>();
</code></pre>
<p>至</p>
<pre><code>DefaultingMap<Integer,Integer> defaultvalue = new DefaultingMap<Integer,Integer>(new HashMap<Integer, Integer>(),0);
</code></pre>
<p>还有</p>
<pre><code>public class DefaultingMap<Integer, Integer> implements Map<Integer, Integer>
{
private final Map<Integer, Integer> map;
private final Integer defaultValue;
public DefaultingMap(Map<Integer, Integer> map, Integer defaultValue)
{
this.map = map;
this.defaultValue = defaultValue;
}
@Override public Integer get(Object key)
{
Integer ret = map.get(key);
if (ret == null)
{
ret = defaultValue;
}
return ret;
}
</code></pre>
<p>变成</p>
<pre><code>class DefaultingMap<K, V> implements Map<K,V>{ //remove public and use proper generic parameters
private final Map<K, V> map; // is now generic
private final V defaultValue; // must be of type V
public DefaultingMap(Map<K, V> map, V defaultValue) throws IllegalArgumentException
{
/* because we have defined this constructor DefaultingMap() will need to be
defined if we need/want it. */
if (map == null){
throw new IllegalArgumentException("provided map cannot be null");
}
this.map = map;
this.defaultValue = defaultValue;
}
public V get(Object key){
V ret = map.get(key);
if (ret == null){
ret = defaultValue;
}
return ret;
}
</code></pre>
<p>如果不确定,您需要实现Map接口中的所有方法</p>
<pre><code> @Override
public V put(K key, V value) {
return map.put(key,value); // delegate to map
}
</code></pre>
<p>对我有用。你知道吗</p>