2011-07-18 4 views
4

스칼라에서는 래퍼 클래스를 만들고 "암시 적 def"를 사용하여 원본 클래스에서 리치 래퍼 클래스로 변환하여 기존 클래스에 "새 메서드를 추가"할 수 있습니다.스칼라 리치 랩핑 (암시 적)을 사용하는 클래스의 새로운 생성자

플로트 목록과 함께 많은 생성자를 사용하는 그래픽 용 자바 라이브러리가 있습니다. 나는이 클래스들에 새로운 wrapper를 추가하는 것을 좋아할 것이다. 그러나 이것은 위의 메소드들처럼 작동하지 않는 것 같다. 즉, 나는 더 간단한 생성자를 갖고 싶지만 여전히 래퍼 클래스 이름이 아닌 원래 클래스 이름을 계속 사용할 수 있어야하지만 현재는 다른 옵션을 볼 수 없습니다.

아이디어가 있으십니까?

+2

공장을 원하지 않습니까? –

+0

별도의 객체 팩토리를 만드는 것이 가장 좋은 해결책 일 것입니다. – vertti

답변

1

클래스의 동반자 개체에 빌드하는 스칼라의 적용 (...) 팩터 리 메서드를 사용하려는 것처럼 들립니다. 예를 들어

에게, 당신은 할 경우 :

class Foo(val bar: Int, val baz: Int) { 
    ... class definition ... 
} 

당신은 (동일한 파일에) 추가 할 수 있습니다 손에두고

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

, 바로 줄을 제공하는 새로운 푸 인스턴스를 생성 매개 변수는 다음과 같이 간단합니다.

val myBar = 42 
val myFoo = Foo(myBar) // Note the lack of the 'new' keyword. 

이렇게하면 myFoo에 bar = 4 인 Foo의 인스턴스가 할당됩니다. 2, baz = 0입니다.

+0

예. @ Janne, 간단히 말해서, 당신이 옳다면, 당신은 단순히 "new"라고 부르는 새로운 생성자를 "에뮬레이트"할 수 없지만 대신이 기술을 사용할 수 있습니다. –

+0

라이브러리는 타사 라이브러리이므로 클래스를 수정하지 않으려 고하며 같은 이유로 클래스에 대한 컴패니언 개체를 만들 수 없다고 생각합니까? – vertti

관련 문제