Scalaの暗黙でラップされたJavaインタフェースの実装のためのファクトリメソッド?

StackOverflow https://stackoverflow.com/questions/514428

質問

私は、Javaインタフェースのための豊富なラッパーを定義するためにScalaの暗黙を使用しています:

class RichThing { def richStuff: Unit = {} }

コンパニオン・オブジェクトでIは、暗黙的な変換とapplyファクトリメソッドを定義する

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

これにより、私は、インタフェースのJava実装をインスタンス化し(これは暗黙的な変換に)RichThingようにそれを使用することができます:

new JavaThingImpl().richStuff

Iはまた、(RichThing法による)ファクトリメソッドを使用してapplyを作成することができます:

val a = RichThing()

私は何をしたいのですが、同じ方法で、インタフェースの任意のJava実装をインスタンス化しています。

:Scalaは、その後、実装のコンパニオンオブジェクトを探し、1を見つけることができないので、これは、動作しません。
val b = JavaThingImpl() // "not found: value JavaThingImpl"

私は、Java実装のためのScalaのコンパニオンオブジェクトを作成することができます:

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

しかし、ポイントは、インターフェースのいずれか(特に不明で)実現のためにこの作業を行うことであろう。

これを実現する方法はありますか?例えば、RichThingオブジェクト内の暗黙的な変換に基づいて、オンザフライでJava実装のためのScalaのコンパニオンオブジェクトを作成するには?

それとも、抽象クラスでは、Java側からScalaのコンパニオンオブジェクトを作成するには?

役に立ちましたか?

解決

いいえ、これはScalaでは不可能です。おそらくタイプの健全性を損なうことなく、言語に追加することが可能であろうが、私は、追加の複雑さはそれだけの価値であるかどうかを問うています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top