Android进阶之路Android技术知识Android开发经验谈

Gradle系列五之面向对象

2019-05-27  本文已影响4人  zhang_pan

新建一个Groovy Class,这个类叫做Person:

class Person {
    String name
    Integer age
    def increaceAge(int year) {
        return age + year
    }
}

Groovy类、方法、变量默认都是public的
然后新建一个Gradle script,如ObjectStudy去使用上面这个类:

def person = new Person(name: "zhangpan", age: 25)
//无论是直接用.去调用还是调用get/set最终都是去调用get/set
println "the name is ${person.name}, the age is ${person.age}"
println person.increaceAge(10)

打印输出如下:

the name is zhangpan, the age is 25
35
接口

和Java的接口完全一样

Groovy运行时元编程

我们在ObjectStudy.groovy中调用Person类没有的方法,如:

person.cry()

这时候运行就会报错:MissingMethodException
此时我们在Person.groovy中重写invokeMethod方法:

Object invokeMethod(String s, Object o) {
        println "the method name is invokeMethod  ${s}"
    }

再去运行,发现没有报错了,而且打印输出如下:

the method name is invokeMethod cry

我们再添加methodMissing方法:

def methodMissing(String name, Object args) {
        println  "the method name is methodMissing ${name}"
    }

运行,打印输出如下:

the method name is methodMissing cry

为类动态的添加方法:

person.metaClass.cry = {
    println "the metaClass cry generated"
}

这时候再运行,打印输出为:

the metaClass cry generated

也能为类动态的添加属性:

person.metaClass.sex = 'male'
println person.sex

打印输出为:

male

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读