문제

나는 Scala Candplicits를 사용하여 Java 인터페이스의 풍부한 래퍼를 정의합니다.

class RichThing { def richStuff: Unit = {} }

동반자 객체에서 나는 암시 적 변환과 apply 공장 방법 :

object RichThing { 
    implicit def rich( thing: JavaThing ) = new RichThing() 
    def apply() = new RichThing()
}

이를 통해 인터페이스의 Java 구현을 인스턴스화하고 RichThing (암시 적 변환으로 인해) :

new JavaThingImpl().richStuff

나는 또한 a를 만들 수 있습니다 RichThing 공장 방법을 사용합니다 ( apply 방법):

val a = RichThing()

내가하고 싶은 것은 같은 방식으로 인터페이스의 임의의 자바 구현을 인스턴스화하는 것입니다. Scala가 구현의 동반자 객체를 찾아서 찾을 수 없으므로 이것은 작동하지 않습니다.

val b = JavaThingImpl() // "not found: value JavaThingImpl"

Java 구현을위한 Scala Companion Object를 만들 수 있습니다.

object JavaThingImpl { def apply() = new RichThing() }

그러나 요점은 인터페이스의 (특히 알려지지 않은) 구현을 위해이 작업을 만드는 것입니다.

이것을 깨닫는 방법이 있습니까? 예를 들어, 암시 적 변환을 기반으로 Java 구현을위한 Scala Companion Objects를 생성합니다. RichThing 물체?

아니면 Java 측에서 Scala Companion Object를 만들려면 아마도 추상 클래스에서?

도움이 되었습니까?

해결책

아니요, 이것은 스칼라에서는 불가능합니다. 유형의 건전성을 손상시키지 않고 언어에 추가하는 것이 가능할 것이지만, 추가 복잡성이 그만한 가치가 있는지 의문을 제기합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top