【发布时间】:2019-03-20 18:06:25
【问题描述】:
我有一个 ThrowingFunction<T, R, E extends Exception> 功能接口,其中包含一个具有此签名的抽象方法:R apply(T t) throws E。
我在功能界面中有一个静态实用程序方法,允许用户将ThrowingFunction<T, R, E extends Exception> 实例转换为Function<T, R> 实例:
static <T, R> Function<T, R> unchecked (final ThrowingFunction<T, R, ?> tf)
{
// code here
}
这里的问题是,如果我将方法引用URL::new 传递给unchecked 静态实用程序方法,为什么编译器不会推断出类型参数T 和R?
final URL url = unchecked(URL::new).apply("http://www.examples.com");
我的意思是,URL::new 不是ThrowingFunction<String, URL, MalformedURLException> 的有效候选,因此T 和R 应该分别被推断为String 和URL?
【问题讨论】:
标签: generics lambda java-8 type-inference method-reference