我有
trait MyBase[T <: MyBase[T]] {
def myid: String
}
所以写
case class MyBaseContainer(myBase: MyBase[_])
在MyBase
中为T
产生类型绑定错误
type arguments [_$1] do not conform to trait MyBase's type parameter bounds [T <: Playground.MyBase[T]]
同时将其写入
case class MyBaseContainer[T <: MyBase[_]](myBase: T)
编译时将所有错误都清除。
为什么会发生这种情况?MyBaseContainer
的这两个签名在语义上是等价的吗?
有没有一种语法方法可以将类型参数MyBase
约束到所需的绑定,而不将T
作为类型参数传递给MyBaseContainer
?
正如Dmytro Mitin在评论中提到的,这将起作用:
import scala.language.existentials
case class MyBase[T <: MyBase[T]] (
myid: String
)
case class MyBaseContainer(myBase: MyBase[T] forSome {type T <: MyBase[T]})