java使用基类中泛型方法的方法引用,这给了我NoSuchMethodError
我有以下课程。当使用lambda调用doSomething(...)
方法时,它可以工作,但当使用方法引用时,它会给出以下异常。为什么?在这种情况下,我是否可以使用方法引用
注: 我不能修改“lib”包中的任何代码
编辑:
我正在使用Eclipse执行以下操作: 版本:Neon发行版(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();
}
}
当运行客户端时。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
共 (0) 个答案