使用对Base类中的泛型方法的方法引用给了我NoSuchMethodError

时间:2016-08-26 08:44:03

标签: java eclipse lambda java-8 method-reference

我有以下课程。使用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

0 个答案:

没有答案