我在构造函数上使用Scala 2.8默认参数,并且出于Java兼容性的原因,我想要一个使用默认参数的无参数构造函数。
出于非常明智的原因,这是行不通的:
class MyClass(field1: String = "foo", field2: String = "bar") {
def this() = {
this() // <-- Does not compile, but how do I not duplicate the defaults?
}
}
我想知道是否有任何我想念的东西。是否有不需要复制参数默认值的想法?
谢谢!
最佳答案
我不会真的推荐它,但是您可以通过向构造函数添加另一个参数来做到这一点:
class MyClass(a: String = "foo", b: String = "bar", u: Unit = ()) {
def this() { this(u = ()) }
}
Unit
是一个不错的选择,因为无论如何您只能将一件事传递给它,因此显式传递默认值不会有任何错误的可能性,但它仍可以让您调用正确的构造函数。如果您只想复制默认值之一,则可以使用相同的策略,只是覆盖一个选择的默认值,而不是添加unit参数。
关于Scala额外的无参数构造函数以及默认构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045863/