Scala列表只包含子类

时间:2013-08-15 21:32:04

标签: list scala seq subclass

有没有办法让List [“只有DataElement的子类”]或List [“只有trait Element”]?

我认为它可能就像这样

val test: List[_ <: DataElement] = List(DataElement("hi"), DataMessage("ho"))

DataMessage extends DataElement

但是我得到了这个错误

type mismatch; found : DataMessage.type required: DataElement

2 个答案:

答案 0 :(得分:1)

你有点过分复杂了。你可以这样做:

val test: List[DataElement] = List(DataElement("hi"), DataMessage("ho"))

答案 1 :(得分:0)

适合我:

trait Element
class DataElement(s: String) extends Element
class DataMessage(s: String) extends DataElement(s)

val test: List[_ <: DataElement] = List(new DataElement("hi"), new DataMessage("ho"))
println(test) // List(Test$DataElement$1@13c695a6, Test$DataMessage$1@17386918)

但您不需要_ <:语法。这些更好:

val test: List[DataElement] = List(new DataElement("hi"), new DataMessage("ho"))
val test: List[Element] = List(new DataElement("hi"), new DataMessage("ho"))