java - Java:将带有参数的非void方法作为另一个方法的参数传递
问题描述
我正在为一个Java小技巧苦苦挣扎,那就是:如何传递一个带有一个参数的非void方法作为另一种方法的参数(或两个)?我想这将涉及 Function 或 Biconsumer,我一直在尝试使用它。但我没能让它工作......确切的上下文很简单:我正在使用 Quickfixj 库修复消息,我需要调用消息类:
- getInt(int tagValue) 返回一个 int,
- getString(int tagValue) 返回一个字符串,
- getChar(int tagValue) 返回一个字符。
我一直在尝试这个:
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 方法并不那么容易......
有没有人有线索使这项工作?非常感谢您的时间和帮助! :)
解决方案
您的方法输入参数Function< Integer, T > messageGetter
意味着您必须提供一个函数或方法引用,该引用将 aInteger
作为输入并T
作为输出返回。
方法引用message::getString
不是有效的输入参数,因为getString(String s)
将 aString
作为输入,而不是Integer
.
想象一下,如果您可以提供该参数,那么该方法的实现messageGetter.apply(fieldTag)
本质上将读取为message.getString(fieldTag)
,这将不起作用,因为fieldTag
是int
.
推荐阅读
- java - 具有范围原型的bean和单例bean中的新对象有什么区别?
- mysql - 如何在全文索引列中搜索子字符串?
- linux - 使用 Ansible 列出已安装包的通用方法
- .net - 是否可以为 Grid.Column 设置动画?
- powershell - 执行 Exchange PS 远程处理时出错:方法调用失败?
- perl - 如何使用 perl 连接到 monetdb
- angular - 设置限制的分页方法在 Angular 2 中不起作用
- skia - 在skia中使用金属作为后端
- batch-file - 将文件解压缩到某个文件夹的批处理脚本
- postgresql - Spring Boot - PostgreSQL 函数数组参数