복붙노트

[SCALA] 스칼라에서 어떻게 자바에서 정의 된 클래스의 동반자 객체를 정의 할 수 있습니다?

SCALA

스칼라에서 어떻게 자바에서 정의 된 클래스의 동반자 객체를 정의 할 수 있습니다?

나는 모델링 도구에 의해 생성 된 자바 클래스에 암시 적 변환을 추가하고 싶습니다. 나는 컴파일러가 자동으로 발견 있도록 해당 클래스의 동반자 개체에 추가 할 그래서. 동반자가 동일한 파일에 정의되어야하기 때문에하지만, 별도의 파일에 추가 할 수 없습니다. 나는 이것에 대해 할 수있는 일이 있나요?

물론, 내가 다른 객체 내 모든 암시 적 변환을 정의 할 수 있습니다 다음 범위에 그것을 가지고 있지만, 이것은 여분의 수입을 필요로한다. 다른 해결책?

해결법

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

    1.스칼라 컴파일러로 지금 동반자가 동일한 파일에 넣어 이외의 객체를 정의하는 방법이 없습니다 스탠드로. 당신이 할 수있는 최선은 동일한 패키지 이름과 여분의 수입과 비 동반자 개체입니다.

    스칼라 컴파일러로 지금 동반자가 동일한 파일에 넣어 이외의 객체를 정의하는 방법이 없습니다 스탠드로. 당신이 할 수있는 최선은 동일한 패키지 이름과 여분의 수입과 비 동반자 개체입니다.

    당신은 분명 매우 유용한 기능이 될 것이기 때문에 http://groups.google.com/group/scala-debate에 게시물을 제발 캡슐화에 대한 가정을 파괴하지 않고 사후 교제를 만들 수있는 좋은 방법을 생각 할 수 있습니다.

  2. ==============================

    2.당신은 내가 자주 배열 PREDEF 같은 내 자신의 프로젝트 별에서 할 물론 자신의 동반자 객체를 정의 할 수 있습니다. 예를 들면 :

    당신은 내가 자주 배열 PREDEF 같은 내 자신의 프로젝트 별에서 할 물론 자신의 동반자 객체를 정의 할 수 있습니다. 예를 들면 :

    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
      }
    

    그런 다음이 사용할 수 있습니다 :

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

    하지만 당신의 domain.TimeUnit가 모듈 (즉 스칼라 객체)

  3. from https://stackoverflow.com/questions/4921827/in-scala-how-can-i-define-a-companion-object-for-a-class-defined-in-java by cc-by-sa and MIT license