MetaClass

Groovy 提供了一个MetaClass,来提供对对象的结构解析。

先看一个例子:

 

class Foo {
 String prop
 def bar() { "bar" }
 def bar(String name) { "bar $name" }
 def add(Integer one, Integer two) { one + two}
}

//实例化一个类
def f = new Foo()

//通过respondsTo,判断对象是否支持某特征的方法
if(f.metaClass.respondsTo(f, "bar")) {
 println "Class Foo has functions : bar";
}

if(f.metaClass.respondsTo(f, "bar", String)) {
 println "Class Foo has a function named /"bar/" which has a string parameter";
}

//通过hasProperty,判断对象是否支持某个属性
if(f.metaClass.hasProperty(f, "prop")) {
 println "Class Foo has a property named /"prop/" ";
}

 

从上述的例子中,可以看出通过MetaClass,很容易判定一个对象有什么属性和方法。不过值得分析的是,在Java语法中,通过一个对象的getClass()可以得到一个Class,这个Class也能判别一个类的属性和方法,为什么还要用MetaClass呢?

一个根本的原因应该在于MetaClass可以更加反映Groovy的动态属性和方法,静态的内容,通过二者都可以得到。

其他方面的差异,还有待于更深入的研究。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值