1

テストに使用されるTestMap静的メソッド(を含む)のみを持つクラス、があります。例として、クラスにはマップを受け入れるメソッドがあり、キーと値のタイプは、以下に示すように、それぞれとで示されます。mainMapsKeyTypeValueType

public static <KeyType,ValueType> void printMap( String msg, Map<KeyType,ValueType> m )
{
    System.out.println( msg + ":" );
    Set<Map.Entry<KeyType,ValueType>> entries = m.entrySet( );

    for( Map.Entry<KeyType,ValueType> thisPair : entries )
    {
        System.out.print( thisPair.getKey( ) + ": " );
        System.out.println( thisPair.getValue( ) );
    }
}

私の質問は、静的メソッドだけで構成されているのではなく、インスタンス化できるようにこのクラスを書き直したい場合、クラス内でどのように機能するマップを定義できMap<KeyType, ValueType>ますか?

以下のように地図を定義しようとしましたが、うまくいかないようです。

private Map<KeyType, ValueType> internalMap;

何か案は?

最初のコメントに従って、クラス定義に追加しようとしました。次に、次のようにコンストラクターをセットアップしました。

public class TestMap<KeyType, ValueType>
{
    private Map<KeyType, ValueType> internalMap;

    /*
     * Constructor which accepts a generic Map for testing
    */
    public <KeyType,ValueType> TestMap(Map<KeyType, ValueType> m)
    {
       this.internalMap = m;
    }       
}

ただし、コンストラクターの割り当ては、タイプの不一致であり、java.util.Mapからjava.util.Mapに変換できないというエラーをスローしています。

4

2 に答える 2

2

これはどういう意味ですか:

class MyMap<KeyType, ValueType> {
    private Map<KeyType, ValueType> internalMap;
}

編集:コンストラクターに型パラメーターは必要ありません:

class TestMap<KeyType, ValueType>
{
    private Map<KeyType, ValueType> internalMap;

    /*
     * Constructor which accepts a generic Map for testing
    */
    public TestMap(Map<KeyType, ValueType> m)
    {
       this.internalMap = m;
    }       
}
于 2012-10-07T17:41:55.723 に答える
1

internalMap試したとおりに宣言できますが、はインターフェイスであるため、具体的なクラスタイプ(たとえば、、など)Mapを使用してインスタンス化する必要があります。HashMapTreeMap

public class TestMap<KeyType, ValueType> {
    private Map<KeyType, ValueType> internalMap;

    public TestMap() {
        internalMap = new HashMap<KeyType, ValueType>();
    }

    public TestMap(Map<KeyType, ValueType> m) {
        internalMap = m;
    }

    public void printMap( String msg )
    {
        System.out.println( msg + ":" );
        Set<Map.Entry<KeyType,ValueType>> entries = internalMap.entrySet( );

        for( Map.Entry<KeyType,ValueType> thisPair : entries )
        {
            System.out.print( thisPair.getKey( ) + ": " );
            System.out.println( thisPair.getValue( ) );
        }
    }

    . . . // methods to add to internal map, etc.
}
于 2012-10-07T17:47:01.870 に答える