首页 > 解决方案 > Java:将带有参数的非void方法作为另一个方法的参数传递

问题描述

我正在为一个Java小技巧苦苦挣扎,那就是:如何传递一个带有一个参数的非void方法作为另一种方法的参数(或两个)?我想这将涉及 Function 或 Biconsumer,我一直在尝试使用它。但我没能让它工作......确切的上下文很简单:我正在使用 Quickfixj 库修复消息,我需要调用消息类:

我一直在尝试这个:

public static < T > void setFieldsMap(int fieldTag,
                                          Function< Integer, T > messageGetter,
                                          String fieldKey ) throws FieldNotFound {
            this.fieldsMap.put( fieldKey, String.valueOf( messageGetter.apply( fieldTag ) ) );
}

我想这样称呼:

setFieldsMap( myTag, message::getString, "MY_KEY" );

但这不会编译。我收到以下错误:“int 不是功能接口”。

当然我已经检查了谷歌,但它没有给我一个合适的解决方案。我只找到了调用没有参数的方法的解决方案。

我一直在使用 Function 来调用不带参数的 getter,或者使用 Biconsumer 来调用带参数的 setter。但似乎用一个参数调用非 void 方法并不那么容易......

有没有人有线索使这项工作?非常感谢您的时间和帮助! :)

标签: javafunction

解决方案


您的方法输入参数Function< Integer, T > messageGetter意味着您必须提供一个函数或方法引用,该引用将 aInteger作为输入并T作为输出返回。

方法引用message::getString不是有效的输入参数,因为getString(String s)将 aString作为输入,而不是Integer.

想象一下,如果您可以提供该参数,那么该方法的实现messageGetter.apply(fieldTag)本质上将读取为message.getString(fieldTag),这将不起作用,因为fieldTagint.


推荐阅读