我有一个基类(Child1, Child2
)的两个子类(Parent
)。
我有一个包含子类对象的列表(kids
)。我想从typedKids
创建一个List[Parent]
类型的新列表(kids
)。
正如您在下面的REPL会话中所看到的,我可以通过直接将invidiuals元素添加到有效的列表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))
^
答案 0 :(得分:3)
kids
已经是List[Parent]
。您无需再次致电List
。除了作业之外,你不需要做任何事情。
val typedKids: List[Parent] = kids
或者(虽然没有理由这样做),你也可以写:
val typedKids: List[Parent] = List(kids:_*)
答案 1 :(得分:0)
List(kids)
的类型签名是
List[List[Product with Serializable with Parent]]
正确的表格是
val typedKids : List[Parent] = kids
因为kids
已经是一个类列表Parent