我想在ArrayBuffer集合中添加不同的对象,所以我必须定义一个基类
case class base (a:String,b:String)
case class Super1 (a:String, b:String, c:String) extends base(a,b)
case class Super2 (a:String, b:String, c:String, d:String) extends base(a,b)
val array=New ArrayBuffer[base]()
val super1=new Super1("1","2","super1")
val super2=new Super2("1","2","super2","super2")
array+=(super1)
array+=(super2)
实际上,还没有测试过上面的代码,但是想知道添加对象是Super1还是Super2而不是基类,因为我需要派生类中所有参数的值。
答案 0 :(得分:1)
您的第一个问题是您无法继承case class
。使用直线class
或trait
即可。
在将类实例加载到ArrayBuffer
之后,然后从array+=super1
array+=super2
array.head match {
case Super1(a,b,c) => println("got 1")
case Super2(a,b,c,d) => println("got 2")
case _ => println("got bad")
}
中提取出来之后,您可以使用模式匹配来确定正确的类型。
$filepath
您的"未经测试"还有一些其他问题。代码,但它们很容易解决。