Как я могу передать имя класса и метод, для которого аннотирование вызывается как «значение» в атрибут аннотации - PullRequest
0 голосов
/ 10 марта 2020
 public class Demo {

     public Demo(){}

     @Annotaion(name = "DemoClass::method1")
     public void method1(params...)
     {

     }

}

Я не хочу жестко задавать атрибут «name», вместо этого мне нужно передать его как что-то вроде этого. GetClass (). GetName (). NAME_OF_THE_METHOD_ON_WHICH_INVOKED

1 Ответ

0 голосов
/ 10 марта 2020

Сначала создайте пользовательскую аннотацию

@Retention(RetentionPolicy.RUNTIME) 
@interface Annotation { 
    public int value1(); 
    public int value2(); 
} 

Затем используйте ее

public class TestClass {
    @Annotation(value1 = 15, value2 = 30) 
    public static void test(){ 
            Class cl = TestClass.class; 
            Method[] allMethods = cl.getMethods(); 
            Method thisMethod = null;

            for (Method m : allMethods)
                if (m.getName().equals("test")) thisMethod = m; 


            Annotation a = thisMethod.getAnnotation(Annotation.class); 
            a.value1(); //returns 15
            a.value2(); //returns 30
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...