继承和多态List作为case类参数

时间:2014-05-12 00:35:23

标签: scala inheritance polymorphism

你好stackoverflowers!

我遇到了一个我自己无法弄清楚的问题,因为我对Scala来说相对较新。

    sealed trait ParentType {}

    class ChildType1(start: Integer, end: Integer) extends ParentType {
        val _key = start
        val _value = end
    }

    class ChildType2(start: String, end: String) extends ParentType {
        val _key = start
        val _value = end

    }

    class ChildType3(start: String, end: Double) extends ParentType {
        val _key = start
        val _value = end
    }

    case class Root(simple: String, intervals: List[ParentType])

    val rootInstance = new Root("foo",  List(new ChildType2("foo", "bar"), new ChildType1(1, 4), new ChildType3("foo", 2.3) ))

(我编写此代码是为了能够使用json4s提取具有多态列表的案例类)

我希望能够访问列表中每个成员的_key和_value的每个值 rootInstance。

        rootInstance.intervals.foreach((item) => println(item))

返回

    com.polymorphic.Boot$ChildType2$1@76933bcb
    com.polymorphic.Boot$ChildType$1@55dec1dd
    com.polymorphic.Boot$ChildType3$1@1389c036

但是我无法访问每个ChildType对象(item._key和item._value)的_key和_value,就好像它们不是 公开的,或在范围内......

我做错了吗?我会很感激任何类型的赛道:)

1 个答案:

答案 0 :(得分:2)

intervalsList[ParentType],因此如果您想要访问_key,则必须在_value内定义ParentTypesealed trait ParentType { val _key: Any val _value: Any }

val

此外,使用sealed trait ParentType { val _key: Any val _value: Any } class ChildType1(val _key: Int, val _value: Int) extends ParentType 标记构造函数参数会更简洁:

{{1}}