首页 > 解决方案 > 如何在 Scala 中向上转换集合?

问题描述

我有一些类型:

abstract class TransitionalState
class State extends TransitionalState
class Parallel extends TransitionalState

和他们的包装:

trait TransitionalStateWrapper[T <: TransitionalState]  {
  def state: T
}
trait StateWrapper extends TransitionalStateWrapper[State]
trait ParallelWrapper extends TransitionalStateWrapper[Parallel]

然后我有方法:

 def convert(): List[TransitionalStateWrapper[TransitionalState]] = {
    val list: List[StateWrapper] = List(new StateWrapper {
      def state: State = new State {}
    })
    list
  }

我怎么能list上当List[TransitionalStateWrapper[TransitionalState]]

我有Error:(18, 5) type mismatch; found : List[StateWrapper] required: List[TransitionalStateWrapper[TransitionalState]] list

标签: scala

解决方案


您不能向上转换它,因为TransitionalStateWrapper[State]它不是TransitionalStateWrapper[TransitionalState].

TransitionalStateWrapper在类型参数中必须是协变的T

trait TransitionalStateWrapper[+T <: TransitionalState]  {
  def state: T
}

推荐阅读