【发布时间】:2014-09-23 01:57:16
【问题描述】:
我有一个基类 (Parent) 的两个子类 (Child1, Child2)。
我有一个包含子类对象的列表 (kids)。我想从kids 创建一个List[Parent] 类型的新列表(typedKids)。
正如您在下面的 REPL 会话中看到的那样,我可以通过将个人元素直接添加到列表 val typedKidsWorks : List[Parent] = List(c1,c2,c3,c4) 来创建一个列表,这是可行的。但是,val typedKids : List[Parent] = List(kids) 没有。知道我在这里缺少什么吗?
scala> abstract class Parent
defined class Parent
scala> case class Child1(name:String) extends Parent
defined class Child1
scala> case class Child2(name:String) extends Parent
defined class Child2
scala> val c1 = Child1("first")
c1: Child1 = Child1(first)
scala> val c2 = Child2("second")
c2: Child2 = Child2(second)
scala> val c3 = Child1("third")
c3: Child1 = Child1(third)
scala> val c4 = Child2("fourth")
c4: Child2 = Child2(four)
scala> val kids = List(c1,c2,c3,c4)
kids: List[Product with Serializable with Parent] = List(Child1(first), Child2(second), Child1(third), Child2(four))
//how to make this work ?
scala> val typedKids : List[Parent] = List(kids)
<console>:40: error: type mismatch;
found : List[Product with Serializable with Parent]
required: Parent
val typedKids : List[Parent] = List(kids)
//this works
scala> val typeKidsWorks : List[Parent] = List(c1,c2,c3,c4)
typeKidsWorks: List[Parent] = List(Child1(first), Child2(second), Child1(third), Child2(four))
^
【问题讨论】:
标签: list scala inheritance types