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}
新聞熱點
疑難解答