[英]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.