有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案