2016-04-22 51 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。需要通用類型信息是一個有效的覆蓋,但我不知道#運算符。