有关规则树和责任链的学习记录

27 阅读1分钟

规则树

public interface StrategyHandler <T, D, R>{
    StrategyHandler DEFAULT = (T, D) -> null;


    R apply(T requestParameter, D dynamicContext) throws Exception;

}

  1. StrategyHandler 是一个函数式接口(只有一个抽象方法 apply),而 lambda 表达式只能用来实现函数式接口的抽象方法。
  2. 当你写 (T, D) -> null 时,编译器会根据上下文推断出:这个 lambda 表达式需要赋值给 StrategyHandler 类型的变量(即 DEFAULT)。
  3. 由于 StrategyHandler 中只有 apply 这一个抽象方法,编译器会自动将 lambda 表达式与 apply 方法关联 ——lambda 的参数列表(T, D)对应 apply 的参数(T requestParameter, D dynamicContext),lambda 的返回值(null)对应 apply 的返回值 R