【发布时间】:2015-09-11 01:04:41
【问题描述】:
在 Scala 中,我可以将子类中的参数用于超类,如下所示:
abstract class A(var a:Int)
class B(a:Int) extends A(a)
class C(a:Int) extends B(a)
object Main extends App {
val b = new C(10)
println(b.a)
b.a = 100
println(b.a)
}
但是,对于案例类,我有错误:
abstract class A(var a:Int)
class B(a:Int) extends A(a)
case class C(a:Int) extends B(a) // case generates a as val
object Main extends App {
val b = C(10)
println(b.a) // without val, a is not accessible
b.a = 100
println(b.a)
}
这是消息:
case_simple.scala:8: error: reassignment to val
b.a = 100
^
我看到这是由于案例类使构造函数参数不可变引起的,但是C(var a:Int) 出现错误
case_simple.scala:3: error: overriding variable a in class A of type Int;
variable a needs `override' modifier
case class C(var a:Int) extends B(a) // case generates a as val
^
one error found
还有C(override var a:Int)
case_simple.scala:3: error: overriding variable a in class A of type Int;
variable a cannot override a mutable variable
case class C(override var a:Int) extends B(a) // case generates a as val
如何解决这个问题?
【问题讨论】:
标签: scala class constructor