我有以下的情况下类:如何用case类处理简单的多态性?
object Fields {
abstract class Base{
def getString: String
}
case class A() extends Base{
def getString = "A+++"
}
case class B() extends Base{
def getString = "B++"
}
def fieldsToString(fields: List[Base]): String = {
fields.tail.foldLeft(s"${fields.head.getString}") {(acc, f) =>
acc + s",${f.getString}"
}
}
}
然后我试图调用此函数以下列方式:
val fields = List(A, B, A)
val result = Fields.fieldsToString(fields)
使我有以下错误:
type mismatch;
[error] found : List[scala.runtime.AbstractFunction0[Product with Serializable
with Fields.Base] with Serializable]
所以我想我需要引入协变:
def fieldsToString[T >: Base](fields: List[T]): String = {
fields.tail.foldLeft(s"${fields.head.getString}") {(acc, f) =>
acc + s",${f.getString}"
}
}
,然后给了我下面的编译错误:
do not conform to method fieldsToString's type parameter bounds [T <: Fields.Base]
到底是什么问题,这是因外壳班,难道他们不同的表现则正常上课?