Scala额外的无参数构造函数以及默认构造函数参数

标签 scala constructor default-parameters scala-java-interop

我在构造函数上使用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/

相关文章:

javascript - 为什么这个 ES6 默认参数值没有给出期望的结果?

scala - scala 的 "collect"采用偏函数的 Spark 数据集等价物

scala - Spark RDD 在每个分区内具有共享指针(以及魔数(Magic Number) 200??)

c++ - 像 C::C(const C&&) 这样的构造函数我们怎么调用它?除了禁止从 const 移动外,还有其他用途吗?

javascript - 将参数传递给 Javascript IIFE 构造函数

c# - 具有默认参数的索引器

c++ - 调用重写虚方法的派生类调用父类方法调用了错误的方法

scala - 将自定义标记器与 Parsers 子类连接

scala - 2 种可能状态下的参数类型 T

c# - C# 中的构造函数与对象初始值设定项优先级