case class (a: Integer, b: Integer, c: Integer){
def this(a: Int, b: Integer) =
this(a, b, if(a > 0) a else b)
}
我知道上面的代码不起作用,但是像这样?如果我可以使用大小写匹配,那就更好了
答案 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)