복붙노트

[SCALA] 어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면?

SCALA

어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면?

나는 (값이 예상되는 제약 조건에 맞지 않는) 경우에 인수 세트를, IllegalArgumentException를 던지는 것은 유효하지 않습니다 구성 할 생성자 인자와 쓰레기를 확인하고 싶습니다. 어떻게 스칼라에서이 코드?

해결법

  1. ==============================

    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. ==============================

    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
    
  3. 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