[SCALA] 어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면?
SCALA어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면?
나는 (값이 예상되는 제약 조건에 맞지 않는) 경우에 인수 세트를, IllegalArgumentException를 던지는 것은 유효하지 않습니다 구성 할 생성자 인자와 쓰레기를 확인하고 싶습니다. 어떻게 스칼라에서이 코드?
해결법
-
==============================
1.당신이 당신의 유효성 검사 논리를 추가 할 수 있도록 스칼라에서는 클래스의 몸 전체는 기본 생성자입니다.
당신이 당신의 유효성 검사 논리를 추가 할 수 있도록 스칼라에서는 클래스의 몸 전체는 기본 생성자입니다.
scala> class Foo(val i: Int) { | if(i < 0) | throw new IllegalArgumentException("the number must be non-negative.") | } defined class Foo scala> new Foo(3) res106: Foo = Foo@3bfdb2 scala> new Foo(-3) java.lang.IllegalArgumentException: the number must be positive.
스칼라는 유틸리티 메소드가 당신으로 다음 더 간결 같은 일을 작성할 수 있습니다 필요합니다 :
class Foo(val i: Int) { require(i >= 0, "the number must be non-negative.") }
더 좋은 방법은 scalaz.Validation [문자열, 푸] 대신 예외를 던지는을 제공하는 팩토리 메소드를 제공 할 수 있습니다. (참고 : Scalaz 필요)
scala> :paste // Entering paste mode (ctrl-D to finish) class Foo private(val i: Int) object Foo { def apply(i: Int) = { if(i < 0) failure("number must be non-negative.") else success(new Foo(i)) } } // Exiting paste mode, now interpreting. defined class Foo defined module Foo scala> Foo(3) res108: scalaz.Validation[java.lang.String,Foo] = Success(Foo@114b3d5) scala> Foo(-3) res109: scalaz.Validation[java.lang.String,Foo] = Failure(number must be non-negative.)
-
==============================
2.
scala> class Foo(arg: Int) { | require (arg == 0) | } defined class Foo scala> new Foo(0) res24: Foo = Foo@61ecb73c scala> new Foo(1) java.lang.IllegalArgumentException: requirement failed
from https://stackoverflow.com/questions/9169691/how-to-check-constructor-arguments-and-throw-an-exception-or-make-an-assertion-i by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] DList은 무엇인가? (0) | 2019.11.22 |
---|---|
[SCALA] 스칼라가 예기치 않게 확장 기능에 대한 확인 유형 수없는 (0) | 2019.11.22 |
[SCALA] 스파크 벡터 열에 첨부 메타 (0) | 2019.11.21 |
[SCALA] 스칼라 - 케이스 클래스를 사용하여 없음 TypeTag 가능한 예외 TypeTag을 얻기 위해 시도? (0) | 2019.11.21 |
[SCALA] 왜 스칼라는 재귀 함수의 반환 형식을 필요로 하는가? (0) | 2019.11.21 |