为什么方法参考不适用于此?

问题描述 投票:0回答:1

我的方法看起来像这样。

static <R> R applyOthers(Some some, Function<List<Other>, R> function) {
    List<Other> others = ...;
    return function.appply(others);
}

现在,当我尝试这个,

withSome(some -> {
   List<Other> others1 = applyOthers(some, v -> v); // works
   List<Other> others2 = applyOthers(some, Function::identity); // doesn't
});

我得到了一个错误。

incompatible types: unexpected static method <T>identity() found in unbound lookup
  where T is a type variable:
    T extends Object declared in method <T>identity()

为什么::identity不起作用?

generics lambda type-inference method-reference
1个回答
1
投票
Function<Object, Object> f1 = v1 -> v1;
Supplier<Object> s1 = Function::identity;
Supplier<Object> s2 = () -> Function.identity();

看到这段代码,我想你只是误用了这里的方法参考。当我们说SomeObject::method时,这个方法引用应该与一些功能接口匹配。在上面的例子中,Function::identity是一种供应商实例,而不是java.util.function.Function实例。

© www.soinside.com 2019 - 2024. All rights reserved.