java - 稍后使用不同的对象/参数调用 Lamba 函数
问题描述
我是java功能接口的新手,所以我想看看这是否可行,如果不可行,请解释一下为什么不可行以及为了实现我的想法有什么可能
我有这些课程
public class A {
...
public String getInfo();
...
}
public class B {
...
public String getOtherInfo();
...
}
我想将对这些函数的引用传递给另一个对象,如下所示:
obj.init(A::getInfo)
obj.init(B::getOtherInfo)
以便稍后我可以在构建函数中的 A 或 B 类型的不同对象上使用/调用这些函数:
obj.build(a1);
obj.build(a2);
...
obj.build(b1);
obj.build(b2);
PS1 我不能为此使用常规接口,因为有很多 getter 和很多类似于 A 的类,我想在这个过程中使用它们,它们彼此不相关
PS2 我尽量避免反射,因为你无法跟踪函数调用
PS3 我的示例并不完全正常,因为它会引发此错误:“无法从静态上下文引用非静态方法”
解决方案
A::get 是Java 方法参考。您应该能够将其存储起来以备后用。因为它是一个实例方法,所以您也需要实例对象。所以这样的事情可能会起作用:
Function<A,String> getFunction = A::get;
每当您需要使用它时,您都可以
//assuming you have an object instance of A which is a
getFunction.apply(a)
您还可以通过声明该方法采用这样的功能参数将其传递给其他方法:
public void someOtherMethod(Function<A,String> param) {
//do whatever with param.
//invoke this with an instance of A when you're ready
param.apply(a);
}
这是一个可能有帮助的参考:https ://www.baeldung.com/java-8-double-colon-operator
推荐阅读
- android - Android - 这些值对于应用程序是否正常?
- c - 程序不扫描数字 149,对于任何其他数字它返回 0
- react-native - 如何使用 ES6 在 render() 中映射存储在 Redux 中的对象数组
- google-apps-script - 是否可以在收件箱中显示 gmail 附加卡或用户必须单击消息?
- reactjs - 为什么不能在 JSX 中传递数字
- python - 通过根据另一个数据框上的条件选择 pandas 数据框列来创建一个 numpy 数组
- angular - 如何从ngrx 7效果中调度多个动作
- java - 如何修复“优先队列删除功能不起作用”
- javascript - 如何将对象的所有值转换为对象的数量
- sql-server - 如何将项目保存到 SQL Server?