[SCALA] 스칼라에서 어떻게 여러 생성자와 자바 클래스를 서브 클래 싱 할 수 있습니까?
SCALA스칼라에서 어떻게 여러 생성자와 자바 클래스를 서브 클래 싱 할 수 있습니까?
나는 여러 생성자와 자바 클래스가 있다고 가정 :
class Base {
Base(int arg1) {...};
Base(String arg2) {...};
Base(double arg3) {...};
}
어떻게 스칼라를 확장 할 수 있습니다 여전히 자료의 생성자의 세 가지에 대한 액세스를 제공? 스칼라에서는 서브 클래스는 그것의 슈퍼 클래스의 생성자 중 하나를 호출 할 수 있습니다. 어떻게이 규칙을 해결할 수 있습니까?
자바 클래스를 가정 내가 바꿀 수없는 레거시 코드입니다.
해결법
-
==============================
1.그것은 특성이 클래스를 확장 할 수 있다는 것을 잊지 쉽습니다. 당신이 특성을 사용하는 경우에는 다음과 같이 호출 할 수있는 생성자의 결정을 연기 할 수 있습니다 :
그것은 특성이 클래스를 확장 할 수 있다는 것을 잊지 쉽습니다. 당신이 특성을 사용하는 경우에는 다음과 같이 호출 할 수있는 생성자의 결정을 연기 할 수 있습니다 :
trait Extended extends Base { ... } object Extended { def apply(arg1: Int) = new Base(arg1) with Extended def apply(arg2: String) = new Base(arg2) with Extended def apply(arg3: Double) = new Base(arg3) with Extended }
형질 자체는 생성자의 매개 변수가되지 않을 수도 있습니다,하지만 당신은 대신 추상적 인 멤버를 사용하여 해당 해결할 수 있습니다.
-
==============================
2.편집 -이 내가 여기에 중복 된 생각 스칼라 메일 링리스트에 질문에서입니다. 내 대답 (즉 자바 디자인 복제) 세 가지 생성자를 제공하고, 클래스를 확장하지 관한
편집 -이 내가 여기에 중복 된 생각 스칼라 메일 링리스트에 질문에서입니다. 내 대답 (즉 자바 디자인 복제) 세 가지 생성자를 제공하고, 클래스를 확장하지 관한
당신의 생성자의 각 궁극적으로 객체의 상태 (S)를 만드는 것이 가정하면,이 상태를 만들 수있는 "정적"방법과 동반자 객체를 생성
object Base { private def stateFrom(d : Double) : S = error("TODO") private def stateFrom(s : Str) : S = error("TODO") private def stateFrom(i : Int) : S = error("TODO") }
이어서 전용 생성자 기본 생성자되는 연기 및 상태 (공개) 오버 스트 복용을 만들
import Base._ class Base private(s : S) { //private constructor takes the state def this(d : Double) = this(stateFrom(d)) def this(str : String) = this(stateFrom(str)) def this(i : Int) = this(stateFrom(i)) //etc }
-
==============================
3.그것은 다른 기준을 충족하는 경우 나 자신을 (이 경우, 문자열에서) 가장 일반적인 하나를 선택하고 내부 변환을 할 것입니다.
그것은 다른 기준을 충족하는 경우 나 자신을 (이 경우, 문자열에서) 가장 일반적인 하나를 선택하고 내부 변환을 할 것입니다.
나는 이것이 최선의 해결책이 아니다 인정하고 뭔가 그것에 대해 잘못된 인상을 받았는데 있지만. :-(
-
==============================
4.이것은 아마도 다소 일하는 것이 아니라 자바 클래스가 너무 많은 생성자가있는 경우 너무 많은 노력이 될 수도 있지만, 바보 같은 대답입니다 :
이것은 아마도 다소 일하는 것이 아니라 자바 클래스가 너무 많은 생성자가있는 경우 너무 많은 노력이 될 수도 있지만, 바보 같은 대답입니다 :
자바의 서브 클래스를 작성하는 것이 구현하는 다양한 생성자가하는 모든 입력을 받아 ( "널 (null)"또는 감시 값의 어떤 종류의 사용을 통해) 입력의 유무에 따라 슈퍼 클래스의 적절한 생성자를 호출하는 생성자, 다음 스칼라에서 그 자바 클래스를 서브 클래스 및 기본 매개 변수로 감시 값을 지정합니다.
from https://stackoverflow.com/questions/3299776/in-scala-how-can-i-subclass-a-java-class-with-multiple-constructors by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 두 개의 필드로 스칼라의 목록을 정렬하려면? (0) | 2019.11.14 |
---|---|
[SCALA] 스칼라리스트를 java.util.List를 변환하는 방법 (0) | 2019.11.14 |
[SCALA] 왜 피하고은 하위 유형? (0) | 2019.11.14 |
[SCALA] 스칼라 컴파일에서 PermGen 공간 : 어떻게 java.lang.OutOfMemoryError와를 방지하기 위해? (0) | 2019.11.14 |
[SCALA] 어떻게 스칼라의 (2.8) 매니페스트 작동합니까? (0) | 2019.11.14 |