2

以下に示すように、HashMapとTreeMapをテストするために使用しようとしているクラスがあります。

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

/*
 * Entry point for the application
 */
public static void main( String [ ] args )
{
    TestMap<String, Integer> testHashMap = new TestMap<String,Integer>(new HashMap<String, Integer>());
    testHashMap.test();

    TestMap<String, Integer> testTreeMap = new TestMap<String,Integer>(new TreeMap<String, Integer>());
    testTreeMap.test();
}    

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

public void test()
{
    try
    {
        //put some values into the Map
        this.internalMap.put("Pittsburgh Steelers", 6);

        this.printMap("Tested Map", this.internalMap);  
    }
    catch (Exception ex)
    {

    }
}

}

put()メソッドを呼び出そうとすると、次のエラーメッセージが表示されます。

Map型のput(KeyType、ValueType)メソッドは、引数(String、int)には適用できません。

他に警告が表示されていません。なぜこれが表示されるのかわかりません。これがジェネリックの要点ではありませんか?一般的に定義し、具体的に実装するには?

助けてくれてありがとう!

4

3 に答える 3

4

test()メソッドはTestMapクラスの一部です。どのTestMapメソッドでも、特定の型ではなく、ジェネリック型のみを参照できます(これは個々のインスタンスに依存するため)。ただし、これを行うことができます。

public static void main( String [ ] args )
{
    TestMap<String, Integer> testHashMap = new TestMap<String,Integer>(new HashMap<String, Integer>());
    testHashMap.internalMap.put("Pittsburgh Steelers", 6);

    TestMap<String, Integer> testTreeMap = new TestMap<String,Integer>(new TreeMap<String, Integer>());
    testTreeMap.internalMap.put("Pittsburgh Steelers", 6);
}
于 2012-10-07T20:55:12.037 に答える
3

問題は、クラス全体がジェネリックであるが、特定のタイプのセットでテストしようとしていることです。テストメソッドをオブジェクトの外に移動して、で使用してみてくださいTestMap<String, int>

于 2012-10-07T20:51:18.863 に答える
1

もう1つのオプションは、TestMapオブジェクトからジェネリックを削除することです。彼らは現在何もしていないようです。

public class TestMap {
    private Map<String, Integer> internalMap;

    /*
     * Entry point for the application
     */
    public static void main( String [ ] args )
    {
        TestMap testHashMap = new TestMap(new HashMap<String, Integer>());
        testHashMap.test();

        TestMap testTreeMap = new TestMap(new TreeMap<String, Integer>());
        testTreeMap.test();
    }

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

    public void test()
    {
        try
        {
            //put some values into the Map
            this.internalMap.put("Pittsburgh Steelers", 6);

            this.printMap("Tested Map", this.internalMap);  
        }
        catch (Exception ex)
        {

        }
    }
}
于 2012-10-07T20:57:40.963 に答える