我来自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>
请帮忙,因为这已经把我逼疯了几个小时了…
使用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)
输出:做. .这样做