我有一个特质和一些案例类来扩展这个特性。
sealed trait Bird
case class Eagle(age: Int) extends Bird
case class Sparrow(price: Double) extends Bird
如果我做任何我希望将Trait作为类型返回的内容,例如
val result = "test" match {
case s:String if s startsWith "t" => Eagle(5)
case _ => Sparrow(2)
}
我得到了这个Product
类型。
> result: Product with Serializable with Bird = Eagle(5)
我理解Product
是所有案例类都扩展的东西。但我不知道应该处理Product
,我怎样才能让Bird
甚至Eagle
回来?
答案 0 :(得分:5)
您可以忽略您不关心的方面。 result
是Bird
,因此请将其作为一个使用。它也是Product
和Serializable
无关(除非你想要/需要它)。您可以通过指定其预期类型来使其明确:
val result: Bird = "test" match {
case s:String if s startsWith "t" => Eagle(5)
case _ => Sparrow(2)
}
给出:
result: Bird = Eagle(5)
或者,您可以将其分配给Bird
类型的另一个变量,或者只是期望它是Bird
并提前收费,调用Bird
特征上定义的方法,并将其传递给它作为带有类型Bird
等参数的函数的参数