我来自Java背景,我的Groovy技能仍然很小......
我在Java中有以下内容:
A
C
实施A
D
,其方法接受A
的实例:doSomething(A a)
以下Groovy代码:
import com.foo.A
def c = new C()
assert c instanceof com.foo.A
def d = new D()
d.doSomething(c);
return true;
首先,所有assert
都失败了:
java.lang.ClassCastException: D1_groovyProxy cannot be cast to com.foo.A
如果我发表评论assert
,我会
No signature of method: com.foo.D.doSomething() is applicable for argument types: (com.foo.C) values: [blah blah]
Possible solutions: doSomething(com.foo.A)
我也尝试过定义:
def c = new C() as C
...但我仍然继续得到上面提到的ClassCastException
。
我正在使用:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.7</version>
</dependency>
请帮忙,因为这让我心理上好几个小时......
答案 0 :(得分:1)
使用groovyConsole
中的问题在示例代码下创建。它完美无缺。
package com.foo
interface A {
void doThat()
}
class C implements com.foo.A {
void doThat() { println "doing that"}
}
class D {
void doSomething(com.foo.A obj) {
println "doing something.."
obj.doThat()
}
}
def c = new C()
assert c instanceof com.foo.A
def d = new D()
d.doSomething(c)
<强>输出:强>
做某事......
这样做