2013-03-29 15 views
8

DSLの一部として、Javaリフレクションを使用してJavaオブジェクトの任意のユーザ指定メソッドを呼び出すコードがたくさんあります。JavaリフレクションでのScalaリフレクションの使用

しかし実際には、多くのJavaオブジェクトはScalaオブジェクトであり、それらのメソッドの一部にはScala @deprecatedアノテーションが付けられています。残念ながら、Javaの注釈機構はScala注釈を見ることができません。また、Scala 2.10まで、それらの注釈にアクセスするための便利な方法はありませんでした。

私は最終的に2.10にアップグレードしました。私のDSLから廃止予定の警告を出せます。しかし、Scalaのリフレクションを使用するためには評価者全体を書き直したくないので、java.lang.reflect.MethodからScalaのリフレクションを使用してScalaメソッドが有効かどうかを調べる便利な方法があります問題は廃止されましたか?あるいは、私はその情報を得る前に、既存のメソッド解決ロジックをScalaのリフレクションを使って複製する必要がありますか?

JavaToScalaスカラ反射に存在していたクラスのように見えますが、これにはmethodToScalaというメソッドがありました。私が見つけることができる唯一のトレースは、Googleコードプロジェクトのhereです。なぜ機能がコアリフレクションから外れたのですか?それともそれはまだ別の名前の下にありますか?

編集:問題のコードがscala.reflect.runtime.JavaMirrorsに存在するようですが、残念ながらそれは公開されているAPIの一部である別のJavaMirrorsですが、必要なものは提供していません。公開APIを介して呼び出しの "パス"がある場合は私の人生のために私たちのプライベートJavaMirrorsの深い埋め込まれたmethodAsScalaプライベートに私を連れて行く。これは、控えめに言って、イライラ:(ここで

+1

新しいScalaのバージョンとの互換性をチェックするとき、反射地獄の深い、なぜだけでなく反射によりプライベートメソッドを呼び出すことではない?それはあなたの頭痛の最悪のではないでしょうすでにだ。 –

+0

私は実際にこれを行うための推薦された方法があるかどうか疑問に思っていました。それは以前と同じように見えますが、ある時点で私有地に移動しました。私はまた、プライベートメソッドを呼び出す方法がわからないのは、クラス全体がプライベートであるからです。反射方法を呼び出すためにリフレクションを使用することはおもしろいです:)残念ながら、すべてのメソッドは特性にあり、私が自分のやり方を反映することができたとしても、そのインスタンスをどのように取得するのか分かりません。すべてのポインタ? –

+1

プライベートクラスを取得するには 'getDeclaredClasses()'を使う必要があります –

答えて

関連する問題