首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >稍后使用不同的对象/参数调用lamba函数

稍后使用不同的对象/参数调用lamba函数
EN

Stack Overflow用户
提问于 2020-12-31 02:00:24
回答 2查看 60关注 0票数 0

我是一个java功能接口的新手,所以我想看看这是否可能,如果不可能,请解释为什么不可以,以及为了实现我的想法可以做些什么。

我有这些课程

代码语言:javascript
复制
public class A {
...
public String getInfo();
...
}

public class B {
...
public String getOtherInfo();
...
}

我想将对这些函数的引用传递给另一个对象,如下所示:

代码语言:javascript
复制
obj.init(A::getInfo)
obj.init(B::getOtherInfo)

这样以后我就可以在build函数中对类型为A或B的不同对象使用/调用这些函数:

代码语言:javascript
复制
obj.build(a1);
obj.build(a2);
...
obj.build(b1);
obj.build(b2);

PS1我不能为此使用常规接口,有很多getter和许多类似于A的类,我想将它们用于此过程,但它们彼此不相关

PS2我尽量避免反射,因为你不能跟踪函数调用

PS3我的示例并不完全有效,因为它抛出了这个错误:“不能从静态上下文引用非静态方法”

EN

Stack Overflow用户

发布于 2020-12-31 02:39:45

A::get是一个Java Method Reference。您应该能够存储它以供以后使用。因为它是一个实例方法,所以您还需要实例对象。所以像这样的东西可能会起作用:

代码语言:javascript
复制
Function<A,String> getFunction = A::get;

无论何时你需要使用它,你都可以做到

代码语言:javascript
复制
//assuming you have an object instance of A which is a
getFunction.apply(a)

您还可以将其传递给其他方法,方法声明为接受如下函数参数:

代码语言:javascript
复制
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

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65511486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档