繁体   English   中英

Java-重构类似方法的代码

[英]Java - Refactoring the code of similar methods

我有以下问题:

我有几种方法基本上是用来从Salesforce那里获取东西的。

这是一个例子:

 public Map<String, Customer> findSomethingByIds(String[] somethingIds) throws... {
     return binding.findSomethingByIds(somethingIds);
 }

由于多种原因,在极少数情况下(fe会话到期等),我需要重试此方法的执行,因此我使用了this

所以现在我有这样的事情:

 public Map<String, Something> findSomethingByIds(final String[] somethingIds) throws ... {       
    Map<String, Something> myList = null;                
    Callable<Map<String, Something>> task = new Callable<Map<String, Something>>() {
        @Override
        public Map<String, Something> call() throws Exception {
            return binding.findSomethingByIds(somethingIds);
        }
    };

    RetriableTask<Map<String, Something>> r = new RetriableTask<>(2, 1000, task);
    try {
        myList = r.call();
    } catch (Exception e) {
        // Ex. handling
    }
    return myList;
}

现在,我的代码中有很多这样的方法,因此,如果我想使用RetriableTask接口,我必须向这些方法中添加很多代码,类似于上面的方法,我想不惜一切代价避免这样做。 所有这些方法几乎都返回不同的东西,所以我不能在这里使用Factory(或者我不知道如何)。 有谁知道任何解决方案吗? 任何帮助,将不胜感激。

如果您有执行类似操作的方法,唯一的区别是返回类型,请尝试使用泛型

public Map<String, T> findSomethingByIds(final String[] somethingIds) throws ... {       

}

这将使您可以对不同的对象类型执行等效的处理,而无需在各处复制和粘贴代码。

响应注释时,如果它们采用不同的参数类型,则仍可以在参数中使用泛型。 如果您表示它们具有不同数量的参数(即,具有完全不同的签名),则可以创建包装器方法,该方法执行对该对象类型唯一的处理,然后可以将控制权传递给用于所有对象类型共有的处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM