Rai*_*ter 1 java refactoring exception-handling salesforce
我有以下问题:
我有一些基本上用于从Salesforce获取内容的方法.
这是一个例子:
public Map<String, Customer> findSomethingByIds(String[] somethingIds) throws... {
return binding.findSomethingByIds(somethingIds);
}
Run Code Online (Sandbox Code Playgroud)
由于多种原因,我需要在非常罕见的情况下重试执行此方法(fe会话到期等),所以我使用了这个.
所以现在我有这样的事情:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,我的代码中有很多这样的方法,所以如果我想使用RetriableTask接口,我必须为这些方法添加大量代码,类似于上面的方法,我想不惜一切代价避免.所有这些方法几乎都返回了不同的东西,所以我不能在这里使用工厂(或者我不知道如何).有谁知道这方面的任何解决方案?任何帮助,将不胜感激.
如果你有一个方法做类似的事情,唯一的区别是返回类型,尝试使用泛型:
public Map<String, T> findSomethingByIds(final String[] somethingIds) throws ... {
}
Run Code Online (Sandbox Code Playgroud)
这将允许您对不同的对象类型执行等效处理,而无需在任何地方复制和粘贴代码.
响应注释,如果它们采用不同的参数类型,您仍然可以在参数中使用泛型.如果你的意思是他们有不同数量的参数(即,具有完全不同的签名),那么你可以创建包装方法来执行该对象类型独有的处理,然后你可以将控制传递给通用方法所有对象类型共有的处理.
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |