Java 8:将对象的方法及其参数作为参数传递
Posted
技术标签:
【中文标题】Java 8:将对象的方法及其参数作为参数传递【英文标题】:Java 8: Pass object's method & its arguments as parameter 【发布时间】:2018-04-13 23:38:47 【问题描述】:我有两个班级 A
和 B
,像这样:
class A
public Integer fetchMax()
// Make a network call & return result
class B
public Double fetchPercentile(Integer input)
// Make a network call & return result
现在我需要为fetchMax()
和fetchPercentile(Integer)
两种方法提供retry
机制。我想使用helper
类提供此行为,其中retry
方法可以采用(A 或B)的instance
、method-name
和method-arguments
。重试基本上会重新尝试提供的对象方法。
类似这样的:
class Retry
public static R retry(T obj, Function<T, R> method, Object... arguments)
// Retry logic
while(/* retry condition */)
obj.method(arguments);
【问题讨论】:
【参考方案1】:只需将Callable
作为参数:
public static <R> R retry(Callable<R> action)
// Retry logic
while(/* retry condition */)
action.call();
这样称呼它:
Retry.retry(() -> a.fetchMax());
Retry.retry(() -> b.fetchPercentile(200));
您可能想要使用或从 guava-retrying 获得灵感,这是 Google 的 Guava library 的一个小扩展,以允许创建可配置的重试策略(免责声明:我是原作者)。
【讨论】:
在整个问题中,我不能只看到那里需要什么以及它是否与使用 Callable 相关,但在阅读完这篇文章后,我认为这可能是 OP 应该使用的。 是的,这也是你在 pre java 8 中的做法。它应该仍然有效。 lambda 表达式可能也可以与接口一起使用,***.com/questions/13604703/…以上是关于Java 8:将对象的方法及其参数作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章