有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

异常处理Java重构类似方法的代码

我有以下问题:

我有一些方法基本上是用来从Salesforce那里得到一些东西的

下面是一个例子:

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

出于许多原因,我需要在极少数情况下(f.e会话过期等)重试执行此方法,因此我使用了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;
}

现在,我的代码中有很多这样的方法,所以如果我想使用RetrableTask接口,我必须向这些方法添加很多代码,类似于上面的方法,我希望不惜一切代价避免这种情况。所有这些方法都返回了一些不同的结果,所以我不能在这里使用工厂(或者我不知道如何使用)。有人知道解决这个问题的方法吗?任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

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

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

    这将允许您对不同的对象类型执行等效处理,而无需到处复制和粘贴代码

    对于注释,如果它们采用不同的参数类型,您仍然可以在参数中使用泛型。如果你的意思是他们有不同的个数(即,有完全不同的签名),那么你可以创建包装器方法来执行对该对象类型唯一的处理,然后你可以将控制权传递给通用方法来进行对所有对象类型通用的处理