Scala:如何在构造函数重载中添加条件?

时间:2018-10-19 18:18:59

标签: scala

    case class (a: Integer, b: Integer, c: Integer){

          def this(a: Int, b: Integer) =
            this(a, b, if(a > 0) a else b)
    }

我知道上面的代码不起作用,但是像这样?如果我可以使用大小写匹配,那就更好了

1 个答案:

答案 0 :(得分:0)

由于只能设置默认值,而不能设置所需的条件,因此可以将逻辑放在伴随对象内的一个(或多个)方法中,然后调用相应的类构造函数。通过这种方法,您可以将逻辑(最终可能会改变)与类本身明确分开。

您的特殊情况可以这样解决:

case class MyClass(a: Int, b:Int)

object MyClass {
  def build(a: Int, b: Int) = {
    if (a > 0) MyClass(a,a)
    else MyClass(a,b)
  }
}


MyClass(1,1) // MyClass(1,1)
MyClass(1,-1) // MyClass(1,-1)
MyClass.build(1,1) // MyClass(1,1)
MyClass.build(1,-1) // MyClass(1,1)