でケースクラスのフィールドに定義された注釈にアクセスするためにどのように私は次のJavaアノテーションは は、実行時
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "";
}
を定義したと私は、次のScalaのケースクラスを定義しました:
@Prefer("xyz")
case class TestAnno(arg1 : String, @Prefer("abc") agr2 : String)
私は反射を使用してケースクラスレベルで定義されたアノテーションを表示できますが、ケースクラスTestAnno
のメンバーarg2
のアノテーションにはアクセスできません。コードのコンパイルをしています。私は、変数宣言もスカラアクセサもどちらも注釈を持っていないようです。コンストラクタ定義とcopy
メソッドのみが、caseクラス宣言で定義されたパラメータの注釈を保持しているように見えます。
ケースクラスで宣言されたフィールドの注釈を強制的に生成する別の方法がありますか?コンストラクタを読み込み、ASM ByteCode LibraryまたはParaNamerなどのライブラリを使用して、注釈を持つパラメータを見つける必要がありますか?主にScalaのケースクラスで使用できるソリューションが必要です。
これらのパラメータへのアクセス方法に応じて、代わりに '@setter'、' @getter'、または '@param'を' @field'と一緒に追加する必要があります。 (あなたはそれらのすべてを試して、1つずつ削除することができます) – al3xar