问答详情
源自:3-5 条件构造器查询(4)

function函数传参

我在上个视频中听您说到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这个方法啊,我就这里没有搞懂,望指点

提问者:weixin_慕田峪341811 2019-06-14 17:03

个回答

  • 老猿
    2019-06-15 14:20:02

    该函数式接口声明了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一下,根据方法调用栈追踪一下。


  • athr
    2022-07-07 09:04:06

    public Children and(boolean condition, Consumer<Children> consumer) {
        return this.and(condition).addNestedCondition(condition, consumer);
    }