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

时间:2016-04-22 21:39:30

标签: java scala generics override

我正在尝试在Scala中实现一个抽象的通用Java类,并且我收到了表单错误

$http.post('http://xyz.mybluemix.net:9000/post', data);

我正在实现的库类如下所示:

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)。在Java中,我可以这样做:

C

在Scala中,我正在尝试

new A<Concrete1, Concrete2>() {
    @Override
    public void B(C c) {
        // implementation
    }
}

我在顶部收到错误消息。使用new A[Concrete1, Concrete2] { def B(c: C): Unit = { // implementation } } ,编译器会抱怨override。似乎Scala类型系统无法识别method B overrides nothing我作为C传入的内容,但我不确定 认为它是什么类型。

我已尝试在A<Concrete1, Concrete2>#Cself: A[Concrete1, Concrete2] =>上指定C和自我类型,但都没有解决问题。我也尝试了def B(c: self.C,但这会引发语法错误。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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