我在上个视频中听您说到function这个接口有两个泛型,R和T,然后您又说到我们传进来的的参数和返回值都是wrapper对象,您指的是apply这个方法吗?
FunctionalInterface public interface Function<T, R> { /** * Applies this function to the given argument. * * @param t the function argument * @return the function result */ R apply(T t);
但是在and()方法里面又没有调用apply这个方法啊,我就这里没有搞懂,望指点
该函数式接口声明了T、R两个泛型形式参数,在and中,实际传入的你可以理解为Function接口的匿名实现类,这时候的泛型是实参,T和R都是QueryWrapper。而且and中你要追溯源码,最后确实调用apply了,我给你列出最后调用apply的代码,在AbstractWrapper类中:
protected Children addNestedCondition(boolean condition, Function<Children, Children> func) {
return doIt(condition, LEFT_BRACKET, func.apply(instance()), RIGHT_BRACKET);
}
你也可以运行时debug一下,根据方法调用栈追踪一下。
public Children and(boolean condition, Consumer<Children> consumer) { return this.and(condition).addNestedCondition(condition, consumer); }