我正在尝试在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
}
}
在Scala中,我正在尝试
new A[Concrete1, Concrete2] {
def B(c: C): Unit = {
// implementation
}
}
我在顶部看到错误消息。使用
override
,编译器会抱怨method B overrides nothing
。看来Scala类型系统无法识别我作为C
传入的A<Concrete1, Concrete2>#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
。需要通用类型信息才能使其有效覆盖,但是我不知道#
运算符。