【发布时间】:2018-06-01 08:02:08
【问题描述】:
我有一个带有伴生对象的案例类:
object Taco extends Dinner[Taco] {
def ingredientNames: Seq[String] = Seq("filling", "cheese", "sauce")
}
case class Taco(filling: Meat, cheese: Cheese, sauce: Sauce)
extends Dinner
还有一个:
object Cheeseburger extends Dinner[Cheeseburger] {
def ingredientNames: Seq[String] = Seq("cheese", "bun", "condiments")
}
case class CheeseBurger(cheese: Cheese, bun: Bun, condiments: Seq[Condiment])
extends Dinner[Cheeseburger]
在实际创建任何晚餐实例之前,我需要获取这些晚餐的成分名称:
def printMenu[D <: Dinner[D]]: String = ???
如何访问Dinner 子类的伴随对象?
【问题讨论】:
-
为什么伴随对象
Taco扩展Dinner[Taco]?这不应该是,因为案例类Taco已经扩展了Dinner[Taco](我想这是一个错字?不能有两个不同的类Dinner具有不同的arities)。 -
@Andrey - 我相信对象和案例类都可以像这样扩展
Dinner,因为Dinner的数量为零。 (对吗?)但是,我实际上并不是说这是个好主意。 -
不,
Dinner[Taco]需要1,而Dinner需要0。它们不能在同一范围内共存。 -
@AndreyTyukin 你指的是
printMenu部分吗?那应该是D <: Dinner[D]——刚刚编辑以解决这个问题。希望我们同意Dinner现在总是有 arity 1。(假设 type 参数被认为是 arity 的一部分,我想一定是这种情况。但也许我误解了你所说的 arity 的意思。)跨度> -
不,我提到了
class Taco extends Dinner。它仍然有0。应该是class Taco extends Dinner[Taco]。
标签: scala generics companion-object