我正在尝试在 Scala 中实现一个抽象的通用 Java 类,但出现以下形式的错误
object creation impossible, since method B in class A of type (x$1: A<Concrete1, Concrete2>#C)Unit is not defined
我正在实现的库类如下所示:
public abstract class A<T, U> {
public void B(C);
public abstract class C {
// elided
}
}
我想实现一个A
来交回库(它将调用B
,提供一个C
)。在Java中,我可以做到:
new A<Concrete1, Concrete2>() {
@Override
public void B(C c) {
// implementation
}
}
在斯卡拉,我正在尝试
new A[Concrete1, Concrete2] {
def B(c: C): Unit = {
// implementation
}
}
我在顶部收到错误消息。使用override
,编译器抱怨method B overrides nothing
。似乎 Scala 类型系统无法识别我作为A<Concrete1, Concrete2>#C
传入的C
,但我不确定它确实认为它是什么类型。
我尝试指定self: A[Concrete1, Concrete2] =>
,以及在C
:def B(c: self.C
上的自类型,但都没有解决问题。我也尝试了def B(c: A[Concrete1, Concrete2].C)
,但这引发了语法错误。
有什么建议吗?
已解决: def B(c: A[Concrete1, Concrete2]#C): Unit
.需要泛型类型信息才能成为有效的覆盖,但我不知道#
运算符。