我正在尝试在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。需要通用类型信息才能使其有效覆盖,但是我不知道#运算符。

10-08 12:57