1
當我使用從一個f-bound類型到另一個f-bound類型的投影時,我得到一個我不明白的類型錯誤。這可能是related to an earlier question,但我不確定。不能使用類型投影到遞歸(f-bound)類型
的設置很簡單:
trait Foo[F <: Foo[F]] {
type I <: Foo[I]
}
也就是說,我有一個包含投影到另一個類似系統的系統F
。
好吧,現在我需要做的是,給出F
,能夠使用F#I
。但編譯器抱怨:
trait Test {
def apply[F <: Foo[F]]: Unit = bar[F#I] // type error
def bar [F <: Foo[F]]: Unit = ???
}
<console>:52: error: type arguments [F#I] do not conform to method bar's
type parameter bounds [F <: Foo[F]]
def apply[F <: Foo[F]]: Unit = bar[F#I]
^
那麼,爲什麼這樣呢?有沒有解決方案?
其實,這似乎是一個this problem變體,其沒有解釋是怎麼回事。
編輯:例如,下面的編譯:
trait Test {
def apply[F <: Foo[F] { type I = I1 }, I1 <: Foo[I1]]: Unit = bar[I1]
def bar [F <: Foo[F]]: Unit = ???
}
現在的問題是,低劣的類型參數I1
會冒泡通過幾十個在我的API級別的,所以我真的很需要找到避免第二個類型參數的解決方案。