在 Groovy 中,实例的元类与其 class 的元类有什么区别

In Groovy what's the difference between an instance's metaClass and its class's metaClass

见以下代码:

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

结果是:

false

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

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