在 Groovy 中,实例的元类与其类的元类有啥区别
Posted
技术标签:
【中文标题】在 Groovy 中,实例的元类与其类的元类有啥区别【英文标题】:In Groovy what's the difference between an instance's metaClass and its class's metaClass在 Groovy 中,实例的元类与其类的元类有什么区别 【发布时间】:2016-03-19 11:54:35 【问题描述】:见以下代码:
class Car implements GroovyInterceptable
car=new Car()
Car.metaClass.hello=println "class Car:hello"
car.metaClass==Car.metaClass
结果是:
false
所以我的问题是:car.metaClass 和 Car.metaClass 有什么区别?我做了一些搜索,但没有结果。有人可以帮忙吗?
【问题讨论】:
【参考方案1】: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
【讨论】:
以上是关于在 Groovy 中,实例的元类与其类的元类有啥区别的主要内容,如果未能解决你的问题,请参考以下文章