weixin_慕田峪341811
2019-06-14 17:03
我在上个视频中听您说到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);
}MyBatis-Plus入门
56840 学习 · 381 问题
相似问题