Scala 2.10M7 の新しいリフレクション API を使用して、コンストラクター引数の注釈を抽出しようとしています。注釈は、実行時に必要な Java で記述されており、Scala で実行しようとすると、Java を使用することを推奨する警告が表示されました。
各コンストラクター引数と注釈のシンボルを正常に取得しました...しかし、最終的に ClassFileAnnotArg タイプのものになります(以下のコードの av )。これらをどうするかわかりません。ソース コード/scaladoc を見ると、いくつかのケース クラスに分割したいように見えますが、その方法がわかりませんでした。
この質問はコンストラクター引数のアノテーションに固有のものではないと思いますが、より詳細なスカラ リフレクションを使用したかったので、Java アノテーション リフレクション メカニズムだけを使用することはできません。
import scala.reflect.runtime._
val ty = universe.typeOf[Test1]
val constructors = ty.member(universe.nme.CONSTRUCTOR)
for (constructor<-constructors.asTerm.alternatives.map{_.asMethod}) {
println("Constructor = "+constructor)
println("Overloaded = "+constructor.isOverloaded)
for (pp<-constructor.params) {
println("Constructor params")
for (p<-pp) {
println(" name="+p.name)
println(" type="+p.typeSignature)
for (a<-p.getAnnotations) {
println(" annotation "+a.atp)
for ((aname,av)<-a.assocs) {
println(" "+aname.decoded+"="+av)
}
}
}
}
}
アノテーションオブジェクトのインスタンスを取得する方法はありますか(Javaアノテーションで行うように)、またはgetAnnotationsを通過する必要がありますか/必要なものであることを確認する/ assocを反復処理する/必要なものであることを確認する必要があります/ 何らかの形で結果を予想される型に一致させます / 結果を取得しますか?