我想定义一个函数,该函数根据我给它的Key和Value类返回一个实例化的映射:
类似
Map<Integer, String> map = getMap(Integer.class, String.class);
但我不确定如何以正确的方式定义getMap函数。我在想像
<K,V> Map<K,V> getMap(Class<K> keyClass, Class<V> valClass) {
Map<keyClass, valClass> retMap = new HashMap<keyClass, valClass);
.... // add values to my map
return retMap;
}
但这似乎根本不起作用。
有没有人有任何建议?
答案 0 :(得分:0)
您正在混合这些概念。地图是一种通用类型。 Java中的泛型将在编译时被删除。所以你不能像在运行时那样在运行时设置它们。正确的方法可能是这样的:
static <K,V> Map<K,V> getMap() { return new HashMap<K, V>(); }
然后你可以调用它:
Map<Integer, String> m = getMap();
答案 1 :(得分:0)
正确的语法要简单得多:
Map<K, V> retMap = new HashMap<K, V>();
因为K
和V
是类型占位符。此处不需要Class<K>
和Class<V>
个变量;但是你需要它们,所以编译器可以在调用时推断出正确的类型。
答案 2 :(得分:0)
你做得太复杂了,但你真的很亲密。这样你就可以解决它:
<K,V> Map<K,V> getMap() {
Map<K, V> retMap = new HashMap<K, V>();
// add entries into the map
return retMap;
}
Java对泛型方法有一个非常好的自动类型推断。