代码之家  ›  专栏  ›  技术社区  ›  Emil

这里如何推断泛型类型?

  •  8
  • Emil  · 技术社区  · 14 年前
    public static void main(String[] args) {
        Map<String, Map<Long, List<String>>> map = getHashMap();
    }
    
    static <K,V> Map<K,V> getHashMap()
    {
        return new HashMap<K, V>();
    }
    

    我在google guava(作为工厂方法)中看到了一个类似的代码,用于创建hashmap的实例,而没有提到泛型类型。我不理解上面的程序如何推断泛型。我的意思是函数gethashmap如何理解映射类型,因为我没有向函数传递任何类型信息。

    3 回复  |  直到 12 年前
        1
  •  6
  •   reevesy onejigtwojig    12 年前

    getHashMap 15.12.2.7 Inferring Type Arguments Based on Actual Arguments

    new

    Map<String, Map<Long, List<String>>> map = new HashMap<>();
                                                          ^^diamond
    
        2
  •  1
  •   Andrei Fierbinteanu    14 年前

    Map<String, Map<Long, List<String>>> map = getHashMap(); Map<String, Map<Long, List<String>>> String K Map<Long, List<String>>

    static <K extends Number,V> Map<K,V> getHashMap()
    {
        return new HashMap<K, V>();
    }
    

    K extends Number

        3
  •  1
  •   irreputable    14 年前
    class XX
      static <T> T foo(){ return null; }
    
    String  s = XX.foo();
    Integer i = XX.foo();
    

        String  s = XX.<String> foo();
        Integer i = XX.<Integer>foo();
    

    T

    class XX
      static <T> T foo(){ return new T(); }
    
    String  s = XX.foo();
    Integer i = XX.foo();