복붙노트

[SCALA] 스칼라의 케이스 클래스에 대한 과부하 생성자?

SCALA

스칼라의 케이스 클래스에 대한 과부하 생성자?

스칼라 2.8에서 경우 클래스의 생성자를 오버로드하는 방법은 무엇입니까?

그렇지 않으면 그렇다면, 설명하기 위해 조각을 넣어주세요, 이유를 설명하세요?

해결법

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

    1.생성자를 오버로드의 경우 클래스에 대한 특별한되지 않습니다 :

    생성자를 오버로드의 경우 클래스에 대한 특별한되지 않습니다 :

    case class Foo(bar: Int, baz: Int) {
      def this(bar: Int) = this(bar, 0)
    }
    
    new Foo(1, 2)
    new Foo(1)
    

    그러나, 당신은 또한 당신이 새로운 생략 할 때 호출되는 동반자 개체에 방법을 적용 과부하하실 수 있습니다.

    object Foo {
      def apply(bar: Int) = new Foo(bar)
    }
    
    Foo(1, 2)
    Foo(1)
    

    스칼라 2.8에서, 이름 및 기본 매개 변수는 종종 대신 오버로드를 사용할 수 있습니다.

    case class Baz(bar: Int, baz: Int = 0)
    new Baz(1)
    Baz(1)
    
  2. ==============================

    2.당신은 당신이 "새로운"키워드를 사용할 필요가 오버로드 된 생성자에게 일반적인 방법을 정의 할 수 있지만 그것을 호출 할 수 있습니다.

    당신은 당신이 "새로운"키워드를 사용할 필요가 오버로드 된 생성자에게 일반적인 방법을 정의 할 수 있지만 그것을 호출 할 수 있습니다.

    scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
    defined class A
    
    scala> A(1)
    res0: A = A(1)
    
    scala> A("2")
    <console>:8: error: type mismatch;
     found   : java.lang.String("2")
     required: Int
           A("2")
             ^
    
    scala> new A("2")
    res2: A = A(2)
    
  3. from https://stackoverflow.com/questions/2400794/overload-constructor-for-scalas-case-classes by cc-by-sa and MIT license