class AGroovyClass { def add(val1, val2) { val1 + val2 }}class AGroovyClassExtend { def static add(self, val1, val2, val3) { self.add(self.add(val1, val2), val3) }}use(AGroovyClassExtend) { obj = new AGroovyClass() PRintln obj.add("Hello ", "World!") println obj.add("Hello ", "World!", " Welcome to Groovy!")}返回Hello World!Hello World! Welcome to Groovy!2、Categoty注解将静态方法转变为实例方法。class AGroovyClass { def add(val1, val2) { val1 + val2 }}@Category(AGroovyClass)class AGroovyClassExtend { def add(val1, val2, val3) { add(add(val1, val2), val3) }}use(AGroovyClassExtend) { obj = new AGroovyClass() println obj.add("Hello ", "World!") println obj.add("Hello ", "World!", " Welcome to Groovy!")}返回Hello World!Hello World! Welcome to Groovy!3、注入的方法可以使用类或闭包作为参数。class AGroovyClass {}@Category(AGroovyClass)class AGroovyClassFilter { def filter(array, closure) { array.collect { closure(it) } }}use(AGroovyClassFilter) { obj = new AGroovyClass() println obj.filter([1, 2, 3, 4, 5, 6]) { it * it }}返回[1, 4, 9, 16, 25, 36]4、use方法支持多个分类注入。class AGroovyClass { def add(val1, val2) { val1 + val2 }}@Category(AGroovyClass)class AGroovyClassExtend { def add(val1, val2, val3) { add(add(val1, val2), val3) }}@Category(AGroovyClass)class AGroovyClassFilter { def filter(array, closure) { array.collect { closure(it) } }}use(AGroovyClassExtend, AGroovyClassFilter) { obj = new AGroovyClass() println obj.add("Hello ", "World!") println obj.add("Hello ", "World!", " Welcome to Groovy!") println obj.filter([1, 2, 3, 4, 5, 6]) { it * it }}5、注入的方法拦截原有方法class AGroovyClass { def add(val1, val2) { val1 + val2 } def add(val1, val2, val3) { val1 + val2 + val3 }}class AGroovyClassExtend { def static add(self, val1, val2) { "AGroovyClassExtend add" } // 只有指定了self的类型,才会拦截 def static add(AGroovyClass self, val1, val2, val3) { "AGroovyClassExtend add" }}use(AGroovyClassExtend) { obj = new AGroovyClass() println obj.add("Hello ", "World!") // Hello World! println obj.add("Hello ", "World!", " Welcome to Groovy!") // AGroovyClassExtend add}
新闻热点
疑难解答