我有一个我试图用来测试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)
我没有收到任何其他警告,我不明白我为什么会这样做?这不是泛型的全部意义吗?一般地定义并具体实施?
感谢您的帮助!
答案 0 :(得分: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);
}
答案 1 :(得分:3)
问题是你的整体类是通用的,但是你试图用一组特定的类型来测试它。尝试将测试方法移出对象并在TestMap<String, int>
上使用它。
答案 2 :(得分: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)
{
}
}
}