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

Java 8[无法推断类型变量]问题

  •  4
  • marsouf  · 技术社区  · 7 年前

    我有一个 ThrowingFunction<T, R, E extends Exception> 具有此签名的单个抽象方法的函数接口: R apply(T t) throws E

    我在函数接口中有一个静态实用程序方法,允许用户转换 投掷功能<T、 R,E扩展异常> 实例到 Function<T, R>

    static <T, R> Function<T, R> unchecked (final ThrowingFunction<T, R, ?> tf)
    {
        // code here
    }
    

    这里的问题是为什么类型参数 T R 如果我传递方法引用,就不要被编译器推断出来 URL::new 进入 unchecked 静态效用法?

    final URL url = unchecked(URL::new).apply("http://www.examples.com");
    

    我是说,不是吗 URL::新建 有效的条件 ThrowingFunction<String, URL, MalformedURLException> 因此 T R 应推断为 String URL

    2 回复  |  直到 7 年前
        1
  •  3
  •   Eugene    7 年前

    // a lambda
    ThrowingFunction.unchecked((String x) -> new URL(x));
    
    
    // an explicit cast
    ThrowingFunction.unchecked((ThrowingFunction<String, URL, MalformedURLException>)URL::new);
    
        2
  •  2
  •   luk2302    7 年前

    我不知道问题是什么,但答案是 yes

    ThrowingFunction<String, URL, MalformedURLException> ctor = URL::new;
    final URL url = unchecked(ctor).apply("http://www.examples.com");