gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:16:20 25 4
gpt4 key购买 nike

我有 Java 背景,但我的 Groovy 技能仍然相当少......

我在 Java 中有以下内容:

  • 接口(interface)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;

首先,断言失败:

java.lang.ClassCastException: D1_groovyProxy cannot be cast to com.foo.A

如果我注释掉断言,我会得到

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)

输出:

doing something..
doing that

关于java - 方法 : com. foo.D.doSomething() 的签名不适用于参数类型 : (com. foo.C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com