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

时间:2016-11-10 01:27:04

标签: java groovy

我来自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>

请帮忙,因为这让我心理上好几个小时......

1 个答案:

答案 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)

<强>输出:

  做某事......
  这样做