在此代码中,a
中的参数B
与A.a
class A(var a:String)
class B(a:String) extends A(a) {
println(a) // Use B.a
def p() {
println(a)
}
}
val b=new B("abc")
b.p() // "abc"
b.a="def"
b.p() // "abc" and not "def"
我可以像这样重命名B中的参数:
class B(_a:String) extends A(_a) {
println(_a) // Use B.a
def p() {
println(a)
}
}
但我希望为Scaladoc保留名称' a'以及与语法B(a="def")
的兼容性。
我如何解决这种情况?
答案 0 :(得分:1)
您可以将主构造函数设为私有,并添加一个以a
作为名称的辅助构造函数:
class B private (_a:String, ignore: Unit) extends A(_a) {
def this(a) { this(a, ()) }
println(_a) // Use B.a
def p() {
println(a)
}
}
但这似乎很容易导致混乱。所以我会寻找替代设计,正如对问题的评论所暗示的那样。