Java 如何解决LambdaMetafactory中的错误参数

Java 如何解决LambdaMetafactory中的错误参数,java,lambda,method-reference,Java,Lambda,Method Reference,我试图在App.java的main方法中使用LambdaMetafactory.metafactory()执行带注释的方法。代码可在此处找到: 如果我试图执行此代码,它将引发异常: Incorrect number of parameters for instance method invokeVirtual com.drfits.transfer.TransferExecutorImpl.execute:(Transfer)void; 0 captured parameters, 1 func

我试图在App.java的main方法中使用LambdaMetafactory.metafactory()执行带注释的方法。代码可在此处找到:

如果我试图执行此代码,它将引发异常:

Incorrect number of parameters for instance method invokeVirtual com.drfits.transfer.TransferExecutorImpl.execute:(Transfer)void; 0 captured parameters, 1 functional interface method parameters, 1 implementation parameters

错误试图告诉您没有传递其他参数。它期望一个,但你没有通过一个

我建议您查看正在传递的参数,并将它们与构建lambda时实际传递的参数进行比较

首先写下您要做的事情和lambda,看看您应该传递哪些参数。

使用代码

TransferExecutor transferExecutor= new TransferExecutorImpl();
Function<Transfer, Void> commonLambda = transferExecutor::execute;
  • 在调用时提供参数:

    … .getTarget().invokeExact((TransferExecutorImpl)transferExecutor);
    
  • 请注意,仍然存在细微的差异。语句
    函数commonLambda=transferExecutor::execute
    指接口方法,而您通过注释标识的方法是
    TransferXeCutorImpl
    中声明的方法


    关于绑定捕获的值,请参阅和以获取更多解释和示例。

    不要只链接到整个项目的主页。在这里发布您的问题所涉及的代码。我在参数中找不到错误,因此我已请求对上述代码提供帮助。@EvgeniyFitner您是否尝试过我的建议,将您的详细信息与编译器生成的详细信息进行比较?
    … .getTarget().invokeExact((TransferExecutorImpl)transferExecutor);