如何在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();