在斯卡拉
问题描述:
我试图实现斯卡拉一个抽象的,通用的Java类,我得到的形式在斯卡拉
object creation impossible, since method B in class A of type (x$1: A<Concrete1, Concrete2>#C)Unit is not defined
库的错误与实现抽象成员类的抽象的,一般的Java类那我实施这个样子的类:
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
。需要通用类型信息是一个有效的覆盖,但我不知道#
运算符。