我有以下课程。使用lambda调用doSomething(...)
方法时它可以工作,但是当使用方法引用时,它会给我以下异常。为什么?无论如何我在这种情况下可以使用方法参考吗?
注意: 我无法修改" lib"中的任何代码。封装
修改:
我正在使用Eclipse来执行此操作: 版本:Neon Release(4.6.0) 构建ID:20160613-1800
Java版本: jdk1.8.0_102
package lib;
class Base<T> {
public T m() {
System.out.println("m");
return thisInstance();
}
@SuppressWarnings("unchecked")
T thisInstance() {
return (T) this;
}
}
package lib;
public class Sub extends Base<Sub> {
}
package client;
import lib.Sub;
public class Client {
public static void main(String[] args) throws Throwable {
Sub s1 = new Sub();
doSomething(() -> s1.m());
doSomething(s1::m);
}
interface Aaa {
void f();
}
public static void doSomething(Aaa a) {
a.f();
}
}
运行Client.main()方法时,我得到以下输出:
m
Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: lib.Sub.m()Llib/Sub;
at client.Client.main(Client.java:9)
Caused by: java.lang.NoSuchMethodError: lib.Sub.m()Llib/Sub;
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:977)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1002)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1390)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1746)
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
... 1 more