【发布时间】:2019-09-12 18:38:03
【问题描述】:
我试图了解我实现构造函数重载的方式有什么问题。我想在具有同名成员的类中添加一个接受参数count 的构造函数。
我们的想法是根据默认构造函数参数之一计算 count,除非它通过重载构造函数传递。我稍后会显示代码。
为了说服自己这可行,我构建了一个快速简单的测试:
import org.scalatest.FunSuite
class ConstructorOverloadTest extends FunSuite {
test("Overload parameter shadows class member") {
val actual = new TestME(200).length
200 === actual
1 !== actual
}
class TestME(name:String) {
val length = name.length
def this(length:Int) = {
this("*")
}
}
}
测试按预期通过。这让我明白了重载构造函数参数length阴影/替换了类成员length。
但是当我在另一个类中做同样的事情时,类成员不会被隐藏/替换。
class MyClass(input1: Array[Float], input2: Array[Byte], input3: Array[Float]) {
val count = input2.length
val index = doSomething()
def this(count: Int) = {
this(Array(), Array(), Array())
}
def printCount() = {
if (this.count == 0)
println("ZERO")
else
println("OTHER")
}
}
当我如下使用这个类时
val myInstance = new MyClass(200)
myInstance.printCount()
我希望它将OTHER 打印到屏幕上。相反,它打印ZERO。
为什么?
【问题讨论】:
标签: scala unit-testing constructor scalatest constructor-overloading