相关疑难解决方法(0)

用于在方法调用中显式指定泛型参数的Java语法

显式为通用Java方法提供类型参数的语法是什么?

java generics

55
推荐指数
2
解决办法
2万
查看次数

方法链中的泛型类型参数推断

在阅读完这个问题之后,我开始考虑Java 8中的泛型方法.具体来说,当链接方法时,泛型类型参数会发生什么.

对于这个问题,我将使用Guava的一些通用方法ImmutableMap,但我的问题更为通用,可以应用于所有链式泛型方法.

考虑ImmutableMap.of具有此签名的泛型方法:

public static <K, V> ImmutableMap<K, V> of(K k1, V v1)
Run Code Online (Sandbox Code Playgroud)

如果我们使用这个泛型方法声明a Map,编译器会正确推断泛型类型:

Map<String, String> map = ImmutableMap.of("a", "b");
Run Code Online (Sandbox Code Playgroud)

我知道从Java 8开始,编译器推理机制已得到改进,即它从上下文中推断出通用类型的方法,在本例中是一个赋值.

上下文也可以是方法调用:

void someMethod(Map<String, String> map) { 
    // do something with map
}

someMethod(ImmutableMap.of("a", "b"));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,泛型类型ImmutableMap.of是从参数的泛型类型推断出来的someMethod,即.Map<String, String> map.

但是当我尝试使用ImmutableMap.builder()和链接方法来构建我的地图时,我得到一个编译错误:

Map<String, String> map = ImmutableMap.builder()
    .put("a", "b")
    .build(); // error here: does not compile
Run Code Online (Sandbox Code Playgroud)

错误是:

Error:(...) java: incompatible types: 
ImmutableMap<Object, Object> …
Run Code Online (Sandbox Code Playgroud)

java generics methods method-chaining java-8

10
推荐指数
1
解决办法
611
查看次数

标签 统计

generics ×2

java ×2

java-8 ×1

method-chaining ×1

methods ×1