Groovy中的特性改变了类类型的兼容性?
我的测试代码如下:Groovy中的特性改变了类类型的兼容性?,groovy,Groovy,我的测试代码如下: trait Behavior { } class Dog { def greet() { println 'Hi, I am a dog.' } } def foo(Dog dog) { dog.greet() } def dog = new Dog() as Behavior dog.greet() foo(dog) 它给出如下错误: Hi, I am a dog. Caught: groovy.lang.MissingMet
trait Behavior {
}
class Dog {
def greet() {
println 'Hi, I am a dog.'
}
}
def foo(Dog dog) {
dog.greet()
}
def dog = new Dog() as Behavior
dog.greet()
foo(dog)
它给出如下错误:
Hi, I am a dog.
Caught: groovy.lang.MissingMethodException: No signature of method: test2.foo() is applicable for argument types: (Dog1_groovyProxy) values: [Dog1_groovyProxy@48f278eb]
Possible solutions: foo(Dog), run(), run(), any(), find(), use([Ljava.lang.Object;)
groovy.lang.MissingMethodException: No signature of method: test2.foo() is applicable for argument types: (Dog1_groovyProxy) values: [Dog1_groovyProxy@48f278eb]
Possible solutions: foo(Dog), run(), run(), any(), find(), use([Ljava.lang.Object;)
at test2.run(test2.groovy:18)
为什么这种特质会改变“狗”的阶级类型?当它实现特性“行为”时,它不会是类Dog的实例吗?调用“foo”方法会产生错误
Trait更改类类型兼容性,与“implement”不同?
此处将实例类型更改为行为,如中所述
将对象强制为特征时,操作的结果不是同一实例。可以保证强制对象将实现原始对象实现的trait和接口,但结果将不是原始类的实例