0

これには、既存の Java ライブラリと新しい Scala コードの間の相互運用のアイデアにまつわる多くの使用例があります。私が選択したユースケースは、私が考える最も簡単なものです。

使用事例:

私はいくつかの scala テスト用に JUnit ランナーを提供することに取り組んでいます (Eclipse で素敵な赤/緑のバーを取得できるようにするため) ランナーには、パラメーターとして Java クラスを持つコンストラクターが必要です。したがって、Scala では次のことができます。

class MyRunner(val clazz: Class[Any]) extends Runner {
  def getDescription(): Description 
  def run(notifier: RunNotifier)
}

どちらかを使うと

@RunWith(MyRunner)
object MyTestObject 

また

@RunWith(MyRunner)
class MyTestClass

その後、ランナーは実際に正しくインスタンス化され、適切なクラス オブジェクトが渡されます

残念ながら、私が今やりたいことは、オブジェクト MyTestObject を「取得」するか、MyTestClass を作成することです。これらは両方とも Scala エンティティです。Scala Reflection を使用したいのですが、標準の Junit jar も使用したいと考えています。

私がやった事

次の Stackover フローの質問は参考になりましたが、同じ問題ではありませんでした。私が見つけることができる最も近い質問がありました

http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.htmlの Environments、Universes、Mirrors に関する議論は良かったし、他の scala リフレクションに関する同様のドキュメントも役に立ちました。ほとんどの場合、Scala リフレクションについてです。

私は Scaladocs をブラウズしましたが、Scala リフレクションに関する私の知識は (まだ) それらから欲しいものを得るには十分ではありませんでした。

編集:ここで尋ねられたのは、リフレクションによって作成されているクラスのコードです

@RunWith(classOf[MyRunner])
object Hello2 extends App {

  println("starting")

  val x= "xxx"
}

したがって、興味深いのは、MODULE$ というフィールドを使用して以下に提案されているソリューションは何も出力せず、x の値が null であることです。

4

1 に答える 1