0

私は次のクラスを持っています:

public class IntegerKey extends Number implements Comparable<IntegerKey> {

    private Integer m_key;

    public IntegerKey(Integer key) {
        m_key = key;
    }

    public IntegerKey(int key) {
        m_key = key;
    }

}

このクラスを次のように使用したいと思います:

次のジェネリックがあるとします。

Map<IntegerKey, MyCache> map = new HashMap<IntegerKey, MyCache>();

map.put(5, new MyCache());

これはコンパイルされません。なぜですか?? 私はしたくない:

map.put(new IntegerKey(5), new MyCache());

ありがとうございました。

4

4 に答える 4

5

これはコンパイルされません。なぜですか?

intからへの暗黙的な変換がないためIntegerKeyです。Java でユーザー定義の暗黙的な変換を作成することはできません。あなたは言語によって定義されたものにこだわっています。

どうにかしてを明示的に取得するIntegerKey、マップのタイプを に変更する必要がありますMap<Integer, MyCache>

于 2012-10-04T13:09:34.683 に答える
2

これはコンパイルされません。なぜですか??

プリミティブ型のみがラッパーに自動ボックス化されます。Java では他の組み合わせは許可されていません。

私はしたくない:

map.put(new KeyInteger(5), new MyCache());

その場合は、KeyInteger を使用せず、Integer を使用してください。

于 2012-10-04T13:09:51.250 に答える
2

オートボクシングは、 のプリミティブ タイプとそれぞれのカウンター パーツに対してのみ機能しjava.langます。あなたの例では、IntegerKey完全にドロップして、単に使用することができますInteger

于 2012-10-04T13:10:04.010 に答える