如何使用多个参数围绕变体函数进行稳定包装?

时间:2016-07-29 12:01:57

标签: java java-8 runnable

一个类有许多具有相似结构的方法。

public void notifyProcessingAboutReplay(String transactionId, int matchId, boolean replay){
    //    PART 1
    //------------
    // much preparation and checking with possible returns,
    // that all results in a correct item instance. 
    //-----------

    //     PART 2
    // here can be one or many calls, connected to that item
    // and maybe to parameters after the second one
    item.setReplay(replay);
    item.rewind();
}

每个方法都有两个或更多参数。方法的第一部分检查前两个参数,并可能创建一个项目以供进一步的工作。也许它只是回归。第一部分在所有方法中都是相同的。

方法的第二部分差别很大。他们在第二个项目和参数之后使用该项目和参数(如果有的话)。

我想在一个基本方法和许多部分方法中将这两个部分分开,这些方法将被传递给基本方法,可能是Runnable。但我无法将变体Runnable称为item.variantRunnable(),更不用说item.variantRunnable(arg1, arg2...)了。显然,我对注射和Runnables的了解太低了。

1 个答案:

答案 0 :(得分:2)

您可以创建一个Parameter类:

class Parameter {
  Item item;
  boolean replay;
  //other params
}

并将其用作部分方法的单一入口点:

void baseMethod(Consumer<Parameter> partialMethod, Parameter param) {
  //common stuff
  param.setItem(item);
  //set other relevant things
  partialMethod.accept(param);
}

//example use:
baseMethod(this::partialMethod1, new Parameter(replay=true, ...));

void partialMethod1(Parameter param) {
  //do what you gotta do
  param.getItem().setReplay(param.getReplay));
  param.getItem().rewind();
}