2021SC@SDUSC
Groovy拓展方法与对象的关联方式
问题引入
在上次的博客上分析Groovy的拓展方式时,我们举过这个例子:
String content = new File('config.txt').text
println content
我们知道text是IOGroovyMethods类里面的拓展方法,但这时,又有一个新的问题产生了,File类型怎么可以直接调用IOGroovyMethods里面的方法呢?就让我们在这节博客根据源码深入探讨一下这个问题。
Groovy反射
由于在String类型里面并没有text方法,所以我们可以排除掉直接调用的可能性,那么使用反射的可能性就大大提高了。在分析那些拓展封装的方法,我们发现都有闭包Closure closure这样的一个参数和一个self,例如:
//DefaultGroovyMethods类中,用于遍历对象中的所有元素
public static <T> List<T> each(List<T> self, @ClosureParams(FirstGenericType.class) Closure closure) {
return (