2013-08-15 4 views
0

Есть ли способ иметь список ["только подклассы DataElement"] или List ["only with trait Element"]?Scala Список только с подклассами

Я думал, что это может быть, как это

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

с DataMessage extends DataElement

Но я получаю эту ошибку

type mismatch; found : DataMessage.type required: DataElement

ответ

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([email protected], [email protected]) 

Но вам не нужен синтаксис _ <:. Это лучше:

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

Спасибо за быстрый ответ, моя проблема возникла из-за сопутствующих объектов для классов. –

+0

Возможно, вам стоит отредактировать свой вопрос, чтобы он имел контекст? трудно понять, что вы имели в виду. – dhg

1

Вы немного сокрушаете вещи. Вы можете просто сделать это:

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

Спасибо за быстрый ответ, моя проблема возникла из-за сопутствующих объектов для классов. –

Смежные вопросы