泛型方法的类型参数有什么作用?

Nic*_*ion 2 java guava

我感兴趣的是为什么这段代码产生语法错误,说明ImmutableMap无法解析为一个类型:

ImmutableMap<String, String> advice = ImmutableMap<String, String>.builder()
                    .put(KEY1, VAL1)
                    .put(KEY2, VAL2)
                    .build();
Run Code Online (Sandbox Code Playgroud)

虽然此代码按预期工作:

ImmutableMap<String, String> advice = ImmutableMap.<String, String>builder()
                    .put(KEY1, VAL1)
                    .put(KEY2, VAL2)
                    .build();
Run Code Online (Sandbox Code Playgroud)

这个时期不是我的心理模型应该去的地方,我希望有人可以解释为什么这个时期的"方法方面".我正在使用Guava的ImmutableMap,但它并不完全相关我不认为.我认为它与泛型有关,但我不确定是什么,我不知道如何寻找更好的答案,因为我不知道这个概念会被称为什么.

编辑:作为参考,ImmutableMap有这一行builder()

public static <K, V> Builder<K, V> builder() {
    return new Builder<K, V>();
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 6

builder()是一个静态方法,它具有与之关联的泛型类型,而不是它所定义的类.它将类似于

public static <K,V> ImmutableMap.Builder<K,V> builder() { ... }
Run Code Online (Sandbox Code Playgroud)

注意:<K, V>这里没有与类的泛型类型有任何关系.(不必是通用的)