gpt4 book ai didi

scala - T 和 List[T] 的类型参数边界

转载 作者:行者123 更新时间:2023-12-05 08:37:47 25 4
gpt4 key购买 nike

我有一个带有 2 个类型参数的案例类

case class Relation[T <: Model, RT] (model: T) 

类型 T 显然是一种类属性“模型”。类型 RT 可以与 T 相同,也可以是 List[T](取决于我们创建的关系类型是 OneToOne 还是 OneToMany)。那么我该如何限制 RT,它不允许传递除 T 或 List[T] 之外的其他内容。

PS 我正在阅读有关协变逆变 的内容,但了解不多。它适用于我的情况吗?如果是,能否请您举个例子。如果没有 - 那么请展示其他工具来达到它。我什至无法理解 T 和 List[T] 之间的关系? T <: List[T] 或 List[T] <: T?

提前致谢

最佳答案

思考T <: List[T] , List[T] <: T和协方差,您正在尝试使用 OOP/子类型多态性来解决您的问题。

在 Scala 2 中你可以尝试一个类型类(即席多态性)

case class Relation[T <: Model, RT](model: T)(implicit sel: Selector[T, RT])

trait Selector[T <: Model, RT]
object Selector {
implicit def single[T <: Model]: Selector[T, T] = null
implicit def multiple[T <: Model]: Selector[T, List[T]] = null
}

How to define "type disjunction" (union types)?

关于scala - T 和 List[T] 的类型参数边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64448309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com