我有以下代码
class A(var x: Int, var y: Int){
}
class B(x: Int, y: Int) extends A(x,y){
def setX(xx: Int): this.type = {
this.x = xx
this
}
}
但是会出现以下错误:
error: reassignment to val this.x = xx ^
我不知道发生了什么,因为x和y应该是变量。这样做的正确方法是什么?
答案 0 :(得分:2)
成员变量的名称与构造函数参数的名称存在冲突。
显而易见的解决方法可以很好地编译:
class A(var x: Int, var y: Int)
class B(cx: Int, cy: Int) extends A(cx, cy) {
def setX(xx: Int): this.type = {
this.x = xx
this
}
}
这个问题似乎不是新问题,这是一个llink to a forum entry from 2009。它的发布带有literally the same error message in the same situation。
根本原因是构造函数参数可以自动转换为私有val
,因为可以从对象的方法中对其进行引用:
class B(cx: Int, cy: Int) {
def foo: Int = cx
}