泛型类型参数的下划线在Scala中产生编译错误



我有

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]})

相关内容

  • 没有找到相关文章

最新更新