2016-04-22 161 views
3

我试图实现斯卡拉一个抽象的,通用的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] =>,以及Cdef B(c: self.C上的自我类型,但都不能解决问题。我也试过def B(c: A[Concrete1, Concrete2].C),但是这会引发一个语法错误。

有什么建议吗?

回答

1

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