加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy的动态性

发布时间:2020-12-14 16:54:40 所属栏目:大数据 来源:网络整理
导读:动态语言需要在运行时给类增加方法或属性 根据上章groovy的执行过程可以看到,groovy的执行过程是将类一次加载,且不能修改,那么groovy是如何实现动态的呢? groovy中包含MetaClass接口,该接口扩展了MetaObjectProtocol接口,这就是我们通常所说的MOP协议

动态语言需要在运行时给类增加方法或属性

根据上章groovy的执行过程可以看到,groovy的执行过程是将类一次加载,且不能修改,那么groovy是如何实现动态的呢?


groovy中包含MetaClass接口,该接口扩展了MetaObjectProtocol接口,这就是我们通常所说的MOP协议了,这个MetaClass
能在运行时处理如拦截、重定向、增加/删除方法等等之类的方法调用

groovy类生成器生成的字节码内容是不同与java类生成器的,如有一个“foo”语句,groovy生成的字节码是这样:

getMetaClass().invokeMethod(this,"foo",EMPTY_PARAMS_ARRAY)


eg:

def code = '1 + '
code += System.getProperty('os.version')

println code//prints “1 + 5.1”

println evaluate(code)//prints “6.1”

eg2:

class?Person?{
????String?name
}
//?添加自我介绍的行为
Person.metaClass.introduce?<<?{println?"I'm?$name}
?添加性别属性,默认为男(Male)
Person.metaClass.sex?=?Male
def?person?
new?Person(name:name) person.introduce() println?person.sex

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读