Java 8:将对象的方法及其参数作为参数传递

Posted

技术标签:

【中文标题】Java 8:将对象的方法及其参数作为参数传递【英文标题】:Java 8: Pass object's method & its arguments as parameter 【发布时间】:2018-04-13 23:38:47 【问题描述】:

我有两个班级 AB ,像这样:

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)的instancemethod-namemethod-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:将对象的方法及其参数作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中将泛型对象作为方法参数传递? [复制]

如何通过类对象作为方法参数的RESTful服务吗

java数组作为参数传入函数怎么让他不变化

如何在Java中将对象数组作为参数传递

作为函数参数传递的Java对象[重复]

通过作为方法参数传递对象的副本