我是一个java功能接口的新手,所以我想看看这是否可能,如果不可能,请解释为什么不可以,以及为了实现我的想法可以做些什么。
我有这些课程
public class A {
...
public String getInfo();
...
}
public class B {
...
public String getOtherInfo();
...
}我想将对这些函数的引用传递给另一个对象,如下所示:
obj.init(A::getInfo)
obj.init(B::getOtherInfo)这样以后我就可以在build函数中对类型为A或B的不同对象使用/调用这些函数:
obj.build(a1);
obj.build(a2);
...
obj.build(b1);
obj.build(b2);PS1我不能为此使用常规接口,有很多getter和许多类似于A的类,我想将它们用于此过程,但它们彼此不相关
PS2我尽量避免反射,因为你不能跟踪函数调用
PS3我的示例并不完全有效,因为它抛出了这个错误:“不能从静态上下文引用非静态方法”
发布于 2020-12-31 02:39:45
A::get是一个Java Method Reference。您应该能够存储它以供以后使用。因为它是一个实例方法,所以您还需要实例对象。所以像这样的东西可能会起作用:
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
https://stackoverflow.com/questions/65511486
复制相似问题