JLS转换规则在这一点上看起来非常错综复杂:对一个方法的引用是否正确,这个引用将一些值返回给接受相同参数类型但返回void
的引用?我认为没关系,因为void
比任何类型都要窄。
例如......
import java.util.function.Consumer;
public class MethodRefCaster {
/** Operation accepting and returning Integer. */
Integer fooOp(Integer x) {
System.out.println(x);
return x + 3;
}
/** Applier of given op accepting Integer, returning void. */
void applyOpToBar(Consumer<Integer> op, int bar) {
op.accept(bar);
}
public static void main(String [] args) {
MethodRefCaster x = new MethodRefCaster();
// Cast the method ref to make it fit.
x.applyOpToBar((Consumer<Integer>) x::fooOp, 42);
}
}
如您所料,打印42。但它是正确的Java吗?非常感谢。