在 Scala 中使用抽象成员 class 实现抽象的泛型 Java class
Implementing an abstract, generic Java class with abstract member class in Scala
我试图在 Scala 中实现一个抽象的、通用的 Java class,但我收到了
形式的错误
object creation impossible, since method B in class A of type (x: A<Concrete1, Concrete2>#C)Unit is not defined
我正在实现的库 classes 如下所示:
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 类型系统无法识别我作为 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
。需要通用类型信息才能使其成为有效的覆盖,但我不知道 #
运算符。
我试图在 Scala 中实现一个抽象的、通用的 Java class,但我收到了
形式的错误object creation impossible, since method B in class A of type (x: A<Concrete1, Concrete2>#C)Unit is not defined
我正在实现的库 classes 如下所示:
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 类型系统无法识别我作为 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
。需要通用类型信息才能使其成为有效的覆盖,但我不知道 #
运算符。