在Scala中列出具有多种类型的元素

时间:2016-02-10 09:51:15

标签: scala playframework

我是Scala的初学者,并开始玩类型。

我想初始化一个对象D及其值" myList"这是List的类型。 List可以同时包含A类和B类元素。 A类和B类都扩展了C类.Val myList不是强制性的。

所以我写道:

class A extends C
class B extends C
class D(val myList : Option[List[T]] forSome { type T >: C } = None)

new D(Some(List(new A, new B)))
new D(Some(List(new A, new B)))

我的问题是,这是否是做这种事情的正确方法?此外,拥有可以是不同类型的值或更好地避免它的值是一种好习惯吗?感谢。

1 个答案:

答案 0 :(得分:0)

只需将myList定义为List [C]

即可
class A extends C
class B extends C
class D(val myList : Option[List[C]] = None)
new D(Some(List(new A, new B)))
new D(Some(List(new A, new B)))

没有Option []的更好版本:

class A extends C
class B extends C
class D(val myList : List[C] = List.empty[C])    
new D(List(new A, new B))
new D(List(new A, new B))

案例类更好的版本:

case class A extends C
case class B extends C
case class D(myList : List[C] = List.empty[C])    
D(List(A(), B()))
D(List(A(), B()))