java - 在 Scala 中使用抽象成员类实现抽象的通用 Java 类

标签 java scala generics overriding

我试图在 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/

相关文章:

java - 如何回答 keytool 提出的 Java keystore 问题?

Scala:要求抽象类的伴随对象的成员

scala - Akka Stream 从 Sink 返回对象

c# - 如何使用变量将类型传递给泛型方法?

java - android.view.InflateException : Binary XML file line #27: Error inflating class android. 部件.ToggleButton

java - 从图库中选取图像时出现 FileNotFoundException

java - 我在 Windows 中输入 mvn 命令,但命令行返回一个 java 提示

scala - 如何强制 Scala 使用不同的库版本?

swift - 检查一个类型是否实现了一个协议(protocol)

java - 使用泛型参数重载方法