方法:com.foo.D.doSomething()的签名不适用于参数类型:(com.foo.C)



我来自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)
输出:


做. .这样做

相关内容

最新更新