【发布时间】:2018-10-13 21:41:28
【问题描述】:
是否可以有一个泛型方法,其类型绑定相当于“此特征的每个可能的具体子类,但不是特征本身?”
例如,假设我有以下继承层次:
sealed trait Fruit
case class Apple() extends Fruit
case class Orange() extends Fruit
...
case class Watermelon() extends Fruit
我想定义一个方法def eatFruit[T <: ???](fruit: Seq[T]),它允许T 是Apple、Orange、Watermelon 等类型,但不是Fruit 类型。类型绑定[T <: Fruit] 显然不能胜任。
最初的动力是我们有一个FruitRepository 类,它允许批量/批量插入不同的水果。批处理是在类外部完成的,因此目前它有很多类似于saveApples(apples: Seq[Apple])、saveOranges(oranges: Seq[Orange]) 等的方法,其中包含很多涉及创建批处理更新语句的重复逻辑。我想以更通用的方式管理它,但任何方法 saveFruit(fruit: Seq[Fruit]) 都允许例如包含苹果和橙子的列表,存储库无法处理。
...我也承认,我现在通常对这种类型绑定是否可能感到好奇,即使我们最终以不同的方式解决了存储库问题。
【问题讨论】:
标签: scala generics polymorphism type-bounds