当使用从一种 f 有界类型到另一种类型的投影时,我遇到了一个我不理解的类型错误。这可能与较早的问题有关,但我不确定。
设置很简单:
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]
^
那么这是为什么呢?有没有解决办法?
实际上,它似乎是这个问题的一个变体,它没有解释发生了什么。
编辑:例如,以下编译:
trait Test {
def apply[F <: Foo[F] { type I = I1 }, I1 <: Foo[I1]]: Unit = bar[I1]
def bar [F <: Foo[F]]: Unit = ???
}
现在的问题是,那个糟糕的类型参数I1
会在我的 API 中通过几十个级别冒泡,所以我真的需要找到一个避免第二个类型参数的解决方案。