scala - 如何在 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
解决方案
您不能向上转换它,因为TransitionalStateWrapper[State]
它不是TransitionalStateWrapper[TransitionalState]
.
TransitionalStateWrapper
在类型参数中必须是协变的T
。
trait TransitionalStateWrapper[+T <: TransitionalState] {
def state: T
}
推荐阅读
- c++ - 在 C++ 中的堆栈上创建实例时如何保持多态性?
- java - DatabaseException:无法将 java.lang.String 类型的对象转换为 Models.OrderDetails 类型
- excel - 对象变量或块变量未使用查找功能设置
- c# - Xamarin 形式。网页浏览。不注入javascript
- python - os.listdir() 返回奇怪的韩语值(编码问题)
- wpf - WPF 应用程序冻结 20 秒
- javascript - 在 React 渲染函数中隐藏/显示组件的逻辑和模式
- firebase - 华为设备上的 Firebase 远程配置/实时数据库
- objective-c - 如何在 Objective-C 中使用 Fragaria 框架?
- phpunit - 在 setUp() 中初始化的 PHPUnit 对象在第一次测试后变为空