Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中用params泛化可调用函数?_Java_Refactoring_Runnable_Callable - Fatal编程技术网

如何在java中用params泛化可调用函数?

如何在java中用params泛化可调用函数?,java,refactoring,runnable,callable,Java,Refactoring,Runnable,Callable,我有这两种方法 private void saveBaseLineLatency(E2EResultShort e2EResultShort) { LatencyHistogram latencyHistogram = getLatencyHistogram(e2EResultShort); latencyDrillDownRepository.saveBaseLine(latencyHistogram); saveLatencyTable(latencyHistogra

我有这两种方法

private void saveBaseLineLatency(E2EResultShort e2EResultShort) {
    LatencyHistogram latencyHistogram = getLatencyHistogram(e2EResultShort);
    latencyDrillDownRepository.saveBaseLine(latencyHistogram);
    saveLatencyTable(latencyHistogram);
}

private void saveFreshTestLatency(E2EResultShort e2EResultShort) {
    System.out.println("log: before saveLatencyHistogram");
    LatencyHistogram latencyHistogram = getLatencyHistogram(e2EResultShort);
    latencyDrillDownRepository.save(latencyHistogram);
    saveLatencyTable(latencyHistogram);
}
我如何重构他们的通用代码

我想使用Callable,但它的调用是无参数的。

是您想要的接口。它是Java8中新的java.util.function包的一部分,因此,如果您使用的是旧版本的java,那么它将不起作用。该包还具有许多类似的其他接口,例如接受两个参数的双consumer,以及用于使用各种基本类型的接口

因此,您的助手方法类似于:

private void doLatencyOperation (E2EResultShort newThing, Consumer<LatencyHistogram> consumer) {
  LatencyHistogram lh = getLatencyHistogram(newThing);
  consumer.accept(lh);
  saveLatencyTable(lh);
}

创建一个抽象类并将所有公共代码移到那里

公共抽象类MyClass{

公开无效执行{

}

公开摘要无效callMeLatencyHistogram latencyHistogram,latencyDrillDownRepository; }`

现在在您的方法中,创建具体的MyClass:

私有void SaveFreshTestLatencyE2ResultShort e2EResultShort{


}

您不能使用助手方法吗?
private void saveBaseLineLatency(E2EResultShort e2EResultShort) {
  doLatencyOperation(e2EResultShort, (lh) -> latencyDrillDownRepository.saveBaseLine(lh));
}
public MyClass(E2EResultShort result, latencyDrillDownRepository){
    this.result = result;
}
 LatencyHistogram latencyHistogram = getLatencyHistogram(e2EResultShort);
callMe(latencyHistogram, latencyDrillDownRepository);
saveLatencyTable(latencyHistogram);
System.out.println("log: before saveLatencyHistogram");
MyClass myClass = new MyClass(e2EResultShort, latencyDrillDownRepository){
    public void callMe(LatencyHistogram latencyHistogram, latencyDrillDownRepository){
        latencyDrillDownRepository.save(latencyHistogram);
    }
}

myClass.execute();