1

有没有办法拥有一个 List["only subclasses of DataElement"] 或 List["only with trait Element"]?

我以为可能是这样

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

DataMessage extends DataElement

但我得到这个错误

type mismatch; found : DataMessage.type required: DataElement

4

2 回答 2

1

为我工作:

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"))
于 2013-08-15T21:37:02.753 回答
1

你有点把事情复杂化了。你可以这样做:

val test: List[DataElement] = List(DataElement("hi"), DataMessage("ho"))
于 2013-08-15T21:53:24.730 回答