我试图在 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
上的 self 类型: def B(c: self.C
,但都没有解决问题。我也试过def B(c: A[Concrete1, Concrete2].C)
, 但这会引发语法错误。
有什么建议吗?
最佳答案
已解决:def B(c: A[Concrete1, Concrete2]#C): Unit
。需要通用类型信息才能使其成为有效的覆盖,但我不知道 #
运算符。
关于java - 在 Scala 中使用抽象成员类实现抽象的通用 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36803712/