1

我有

trait MyBase[T <: MyBase[T]] {
  def myid: String
}

所以写


case class MyBaseContainer(myBase: MyBase[_])

T为in产生类型绑定错误MyBase

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

4

1 回答 1

1

正如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]})
于 2021-07-13T07:40:44.323 回答