Mam następujące Java Adnotacja określonaJak uzyskać dostęp do adnotacji zdefiniowany na walizce klasy w czasie wykonywania
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "";
}
I mam następujące klasy przypadek scala zdefiniowane:
@Prefer("xyz")
case class TestAnno(arg1 : String, @Prefer("abc") agr2 : String)
jestem zobaczenie adnotacji zdefiniowanej na poziomie klasy przypadków za pomocą refleksji, ale nie mam dostępu do adnotacji zdefiniowanej dla użytkownika arg2
członka klasy sprawy TestAnno
. Odkompilowanie kodu Widzę, że ani deklaracja zmiennej, ani jego akcesor scala nie mają adnotacji. Wydaje się, że tylko definicja konstruktora i metoda copy
zachowują adnotację dla parametrów zdefiniowanych w deklaracji klasy sprawy.
Czy istnieje jakiś inny sposób zmusić kompilator scala wygenerować adnotacji na obszarach zadeklarowanych w klasie wypadku lub muszę czytać konstruktora i korzystać z biblioteki takie jak ASM ByteCode Library lub ParaNamer dowiedzieć się, jakie parametry mają które adnotacje? Potrzebujesz rozwiązania, które będzie działać przede wszystkim dla klas przypadków Scala.
W zależności od tego, w jaki sposób uzyskujesz dostęp do tych parametrów przez odbicie, może być konieczne dodanie '@ setter',' @ getter' lub '@ param' zamiast lub wraz z' @ field'. (Możesz wypróbować je wszystkie i usunąć jeden po drugim.) – al3xar