如何返回定义的地图?

时间:2015-03-04 23:58:36

标签: java generics dictionary

我想定义一个函数,该函数根据我给它的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;
}

但这似乎根本不起作用。

有没有人有任何建议?

3 个答案:

答案 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>();

因为KV是类型占位符。此处不需要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对泛型方法有一个非常好的自动类型推断。