重複したキーが入力されても実際には2つの対応する値が一緒に追加された場合、値を置き換えないバージョンのHashMapを作成しようとしています。キー値は、追加が発生するようにタイプNumber
でなければなりません。しかし、V
がNumber
のタイプであること、または少なくともsuper.put
を呼び出すまではそれがないことを理解していないようです。 V
のHashMap
は、実際にV
と同じではなく、extend Number
と宣言したものと同じです。パラメータ化されたコレクションを持つジェネリック?
ここでは何が起こっていますか?
public class AdditiveMap<K, V extends Number> extends HashMap<K, V>
{
@Override
public V put(final K key, final V value)
{
if (containsKey(key))
// Second param Found 'Number', required 'V'
super.put(key, (Number)(get(key).intValue() + value.intValue()));
else
super.put(key, value);
}
}
「Integer」は「V」と同じではないというメッセージが表示されていますが、もちろん正しいです。 –
これは、 'merge'メソッドが' Map'インターフェースで設計されたものではありませんか? –
@OliverCharlesworth 'V'は数字を伸ばします – Hatefiend