在Groovy中,实例的metaClass与其类的metaClass之间的区别是什么

时间:2015-12-14 04:09:20

标签: groovy metaclass

请参阅以下代码:

class Car implements GroovyInterceptable{}
car=new Car()
Car.metaClass.hello={println "class Car:hello"}
car.metaClass==Car.metaClass

结果是:

false

所以我的问题是:car.metaClass和Car.metaClass有什么区别?我做了一些搜索,但没有结果。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

car.metaClass适用于名为car的对象。您可以对其进行修改,但其他Car个对象

将无法显示

当您修改Car.metaClass时,这将适用于Car.class的所有对象(在此新元修改后创建)

class Car implements GroovyInterceptable{}
car=new Car()

Car.metaClass.accelerate {->println "Factory tested. Safe acceleration"}
car.metaClass.accelerate  {->println "Owner modified : Random acceleration"}

def anotherCar= new Car();
anotherCar.accelerate()
car.accelerate()

输出

 Factory tested. Safe acceleration
 Owner modified : Random acceleration