曾几何时,为了定义一个分发器作用的方法,我们要在代码中写入茫茫多的if/else来处理将方法如何转发到下一层接口
public void execute() {
// do something
if (conditionA) {
methodA();
} else if (conditionB) {
methodB();
} else if (conditionC) {
methodC();
}
...
else {
methodOther();
}
// do something
}
相信大家对这段代码都是极不满意的。好在JDK8中为我们提供了新增加的函数接口:
- java.util.function
这样,我们可以将需要执行的方法直接传入本方法,极大的增强了我们的代码逻辑和简洁性。function中我们用的最多,适普性最强的一般是Function<T, Z>接口,该接口表示接受一个输入参数,返回一个结果的方法类型,因为输入、输出都是泛型,因而对不同的业务场景具有强大的适应能力。下文我们将以这个接口为例,function中其他接口的处理办法较为类似。
public void execute(Function<T,Z> func) {
// do something
T t = func.apply(z);
// do something
}
这样,上层调用本层接口时可以直接指定本层的执行方法。但是,当考虑到实际业务场景时,这样的代码不一定能奏效。
其中的主要一个问题就是,在实际业务场景中,我们往往要遇到各类型的Exception。这其中有些是代码逻辑上的,有些是业务逻辑上的,我们需要在不同的调用层中处理这些异常,以维持整个业务的正常运转,同时给到使用者和运维人员足