코드를 컴패니언 개체의 메서드로 전송할 수는 있지만 생성자를 모두 피하고 유효성 검사가 필요할 때 동반자 개체를 사용해야하는 이유는 무엇입니까? 그래서 같은 작품
object Example { // To keep class & companion together
class Foo private[Foo] (val value: Int) {}
object Foo {
def apply(i: Int) = if (i>=0) new Foo(i) else throw new Exception("Wrong")
def apply(i: Int, j: Int) = {
if (i>=0 && j>=0 && i.toLong*100+j < Int.MaxValue) new Foo(i*100+j)
else throw new Exception("Bleh")
}
}
}
: 그 객체를 동반자가 될 수 있도록 코드에서 (
scala> Example.Foo(-47)
java.lang.Exception: Wrong
at Example$Foo$.apply(<console>:15)
[...]
scala> Example.Foo(49,62)
res19: Example.Foo = [email protected]
scala> res19.value
res20: Int = 4962
하지 그것을 REPL, 당신은 Example
에 포장 할 필요가 없습니다, 그냥 같은 파일에 있습니다 또는 REPL에서^D를 사용할 수 있습니다.
호출 후 인수를 항상 확인할 수 있습니다. 실패한 경우, 값을 검사하고 예외를 던지거나 2 차 생성자에 전달할 값을 리턴하는 함수를 작성하십시오 :'this (validateAndSum (initDollars, initCents))' –
정말 좋은 생각이 있지만 작동합니다 우리가 하나의 매개 변수를 가지고 있다면 – damluar
튜플을 가지고있는 2 차 생성자를 가질 수 있습니다. 어쨌든 2 차 생성자입니다. 클래스 사용자는 아마도 그것을 볼 수 없을 것입니다. –