在 Scala 中实现一个抽象的、通用的 Java 类和抽象成员类



我正在尝试在 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] =>,以及在Cdef B(c: self.C上的自类型,但都没有解决问题。我也尝试了def B(c: A[Concrete1, Concrete2].C),但这引发了语法错误。

有什么建议吗?

已解决: def B(c: A[Concrete1, Concrete2]#C): Unit .需要泛型类型信息才能成为有效的覆盖,但我不知道#运算符。

最新更新