【问题标题】:How do I return a defined Map?如何返回定义的地图?
【发布时间】:2015-03-04 23:58:35
【问题描述】:

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

但这似乎根本不起作用。

有人有什么建议吗?

【问题讨论】:

    标签: java generics dictionary


    【解决方案1】:

    您正在混淆这些概念。 Map 是一个泛型类型。 Java 中的泛型将在编译时被删除。因此,您不能像以前那样在运行时设置它们。正确的方法可能是这样的:

    static <K,V> Map<K,V> getMap() { return new HashMap<K, V>(); }
    

    然后你可以像这样调用它:

    Map<Integer, String> m = getMap();
    

    【讨论】:

      【解决方案2】:

      正确的语法要简单得多:

      Map<K, V> retMap = new HashMap<K, V>();
      

      因为KV 是类型占位符。这里不需要Class&lt;K&gt;Class&lt;V&gt; 变量;但是您将需要它们,以便编译器可以在调用时推断出正确的类型。

      【讨论】:

        【解决方案3】:

        你做得太复杂了,但你真的很接近。这样你就可以解决了:

            <K,V> Map<K,V> getMap() {
                   Map<K, V> retMap = new HashMap<K, V>();
                   // add entries into the map
                   return retMap;
            }
        

        Java 为泛型方法提供了相当不错的自动类型推断。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-15
          • 2013-12-31
          • 2021-10-14
          • 2013-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多