Scala 案例类返回产品而不是实际类型

Scala 案例类返回产品而不是实际类型,scala,case-class,Scala,Case Class,我有一个trait和一些扩展这个trait的case类 sealed trait Bird case class Eagle(age: Int) extends Bird case class Sparrow(price: Double) extends Bird 如果我做了任何我希望作为类型返回特征的事情,比如 val result = "test" match { case s:String if s startsWith "t" => Eagle(5) case _ =&g

我有一个trait和一些扩展这个trait的case类

sealed trait Bird
case class Eagle(age: Int) extends Bird
case class Sparrow(price: Double) extends Bird
如果我做了任何我希望作为类型返回特征的事情,比如

val result = "test" match {
  case s:String if s startsWith "t" => Eagle(5)
  case _ => Sparrow(2)
}
我得到的是这个
产品
类型

> result: Product with Serializable with Bird = Eagle(5)

我理解
产品
是所有案例类都可以扩展的东西。但是我不知道该如何处理
产品
,我如何才能取而代之的是
甚至是

你可以忽略你不关心的方面<代码>结果是一只
,因此将其作为一只鸟使用。它也是
产品
可序列化
并不相关(除非您希望/需要)。可以通过指定其预期类型使其显式:

val result: Bird = "test" match {
  case s:String if s startsWith "t" => Eagle(5)
  case _ => Sparrow(2)
}
给出:

result: Bird = Eagle(5)

或者,您可以将其分配给另一个类型为
Bird
的变量,或者简单地期望它是
Bird
的变量,然后向前冲,调用
Bird
trait上定义的方法,将其作为参数传递给接受类型为
Bird
的参数的函数,等等。

您可以忽略不关心的方面<代码>结果是一只
,因此将其作为一只鸟使用。它也是
产品
可序列化
并不相关(除非您希望/需要)。可以通过指定其预期类型使其显式:

val result: Bird = "test" match {
  case s:String if s startsWith "t" => Eagle(5)
  case _ => Sparrow(2)
}
给出:

result: Bird = Eagle(5)
或者,您可以将其分配给另一个
Bird
类型的变量,或者简单地期望它是一个
Bird
,然后向前冲,调用
Bird
trait上定义的方法,将其作为参数传递给采用
Bird
类型参数的函数,等等