0
我來自Java背景,我的Groovy技巧仍然非常小...沒有方法的簽名:com.foo.D.doSomething()適用於參數類型:(com.foo.C)
我已在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>
請幫幫忙,因爲這已經讓我的精神現在小時...
你不能做'new'的*接口*。 Groovy會失敗,並顯示*「您無法從抽象界面創建實例」* – Andreas
@Andreas:道歉,我在示例中犯了一個錯誤。我糾正了它。它不是'A',而是'C'。 – carlspring
無法使用帶有腳本的GroovyConsole 2.3.10複製,除了固定的導入。 – Andreas