10

모델링 도구에서 생성 된 Java 클래스에 암시 적 변환을 추가하고 싶습니다. 그래서 나는 그것들을 클래스의 companion 객체에 추가하여 컴파일러가 자동으로 그것들을 찾도록하려고합니다. 하지만 컴패니언을 동일한 파일에 정의해야하기 때문에 별도의 파일에 추가 할 수 없습니다. 이것에 대해 제가 할 수있는 일이 있습니까?스칼라에서 Java로 정의 된 클래스에 대한 컴패니언 개체를 어떻게 정의 할 수 있습니까?

물론 내 모든 암시 적 변환을 다른 개체에 정의한 다음 범위로 가져올 수는 있지만 추가 가져 오기가 필요합니다. 다른 해결책?

+2

패키지 객체에 암시 적 변환을 정의하여 추가 가져 오기를 피할 수 있습니다. – axel22

+0

Java 클래스에는 동반 개체가 없습니다. 속이는 것을 시도하고 Java 클래스에 동반자 객체가있는 것처럼 보이게하는 것을 의미합니까? –

+0

@Rex Kerr : 음, 글쎄, 나는 속임수로 여겨졌다는 것을 몰랐다. @ axel22 : 좋은 생각, 나는 그걸 계속할 것 같아! –

답변

9

약자로 지금은 방법이 없습니다

import my.domain._ 
val tu : TimeUnit = TimeUnit.valueOf("MILLISECONDS") 

을하지만 당신의 domain.TimeUnit는 모듈입니다 : 다음

object domain { 

    type TimeUnit = java.util.concurrent.TimeUnit 
    object TimeUnit { 
    def valueOf(s : String) = java.util.concurrent.TimeUnit.valueOf(str) 
    val Millis = java.util.concurrent.TimeUnit.MILLISECONDS 
    //etc 
    } 

이 사용할 수 있습니다 동일한 파일에 넣는 것 이외의 다른 객체를 정의 할 수 있습니다. 당신이 할 수있는 최선의 방법은 패키지와 이름이 같고 여분의 임포트를 가진 비상업적 인 객체입니다.

캡슐화에 대한 가정을 깨지 않고 post-hoc 동반자 관계를 만드는 좋은 방법을 생각하면 분명히 매우 유용한 기능이므로 http://groups.google.com/group/scala-debate에 게시하십시오.

9

자신 만의 동반자 개체를 정의 할 수 있습니다. 물론 내 프로젝트 고유의 Predef과 같은 배열에서이 개체를 자주 정의 할 수 있습니다. 예를 들면 다음과 같습니다 (예 : 스칼라 object) 스칼라 컴파일러와

+0

그건 "독립형 객체"가 될 것이지, 동반 객체는 아니 겠지? (최종 결과는 동일합니다.) – VonC

+3

적어도 암시 적 변환에 대해서는 작동하지 않습니다. (이는 컴패니언 객체의 달콤한 지점입니다) –

+0

사실입니다. 그러나 여전히 그 자체로 개체이며 여전히 가능합니다. 건네 준 –

관련 문제