Scalaの暗黙でラップされたJavaインタフェースの実装のためのファクトリメソッド?
質問
私は、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では不可能です。おそらくタイプの健全性を損なうことなく、言語に追加することが可能であろうが、私は、追加の複雑さはそれだけの価値であるかどうかを問うています。
所属していません StackOverflow