Я пытаюсь создать свою собственную аннотацию и разобрать ее.Но когда я пытаюсь получить методы, использующие мою аннотацию с использованием отражения, я всегда получаю ложное значение.
Пользовательские аннотации в Google гуглились, но все еще не могут найти точную проблему.
Ниже приводится аннотациякласс и класс, который его использует и анализирует.
Аннотация:
package AnnotationsImpl;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
int custom_int() default 11;
String custom_str();
}
Класс, в котором используется аннотация:
package AnnotationsImpl;
public class AnnotationImpl extends AnnotationExample {
//@CustomAnnotation(custom_str="str1")
int a=2;
@SuppressWarnings("deprecation")
@CustomAnnotation(custom_str="str1")
public static void main(String[] args){
AnnotationExample ai = new AnnotationExample();
ai.overrideMethod();
AnnotationImpl aaa = new AnnotationImpl();
aaa.overrideMethod();
aaa.testingCA();
ai.myDeprecatedMethod();
}
@Override
public void overrideMethod(){
System.out.println("In child class");
}
@CustomAnnotation(custom_str="str1")
public static void testingCA(){
System.out.println("custom annotation");
}
}
Parser:
package AnnotationsImpl;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class AnnotationParser {
public static void main(String[] args)throws Exception{
for(//AnnotationParser.class.getClassLoader().loadClass("AnnotationsImpl.AnnotationImpl")//
Method method : Class.forName("AnnotationsImpl.AnnotationImpl").getMethods()
){
System.out.print("method name :"+method.getName());
System.out.print(" *** Custom annotation present :"+method.isAnnotationPresent(CustomAnnotation.class));
System.out.println();
if(method.isAnnotationPresent(AnnotationsImpl.CustomAnnotation.class)){
System.out.println("custom present");
for(Annotation ann : method.getDeclaredAnnotations()){
System.out.println("Annotation ann :"+ann +"=== method :::"+method);
CustomAnnotation cu = method.getAnnotation(CustomAnnotation.class);
}
}
}
}
}
вывод:
*run:
method name :main *** Custom annotation present :false
method name :check *** Custom annotation present :false
method name :overrideMethod *** Custom annotation present :false
method name :testingCA *** Custom annotation present :false
method name :wait *** Custom annotation present :false
method name :wait *** Custom annotation present :false
method name :wait *** Custom annotation present :false
method name :equals *** Custom annotation present :false
method name :toString *** Custom annotation present :false
method name :hashCode *** Custom annotation present :false
method name :getClass *** Custom annotation present :false
method name :notify *** Custom annotation present :false
method name :notifyAll *** Custom annotation present :false
BUILD SUCCESSFUL (total time: 0 seconds)*
Пробная политика хранения RUNTIME.Почему я всегда получаю аннотацию «ложь»?Заранее спасибо.