2015-12-14 4 views
2

Смотрите следующий код:В Groovy, что разница между метаклассом Экземпляра и его классом метаклассом

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

результата является:

false 

Так что мой вопрос: В чем разница между автомобилем. metaClass и Car.metaClass? Я сделал несколько поисков, но результатов не было. Может ли кто-нибудь помочь в этом?

ответ

2

car.metaClass относится к объекту car. Вы можете modifiy его, но он не будет виден другим 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 

 Смежные вопросы

  • Нет связанных вопросов^_^