定义:
package com.dxz.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //定义注解 @Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.LOCAL_VARIABLE }) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { // 定义两个成员变量 String name() default "jack"; int age() default 22; }
测试:
package com.dxz.annotation; import java.lang.annotation.Annotation; /* * 获得注解信息要注意,当前注解一定要保留在RUNTIME * * 获得注解信息方法: * 1.getAnnotations() * 调用注解成员变量 * 1.假设注解对象ann,调用成员变量方式:ann.name(); * 2.与调用类方法类似 */ public class TestAnnotationInfo { public static void main(String[] args) { TestAnnotationInfo tai = new TestAnnotationInfo(); try { tai.getInfo(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } } @MyAnnotation(name = "zhangxun", age = 20) public void getInfo() throws NoSuchMethodException, SecurityException { // 获取TestAnnotationInfo对象的getInfo()方法中包含的所有注解 @MyAnnotation Annotation[] annos = TestAnnotationInfo.class.getMethod("getInfo") .getAnnotations(); // 遍历annos数组 for (Annotation ann : annos) { // ann就是一个Annotation 对象 // 判断当前ann是否是MyAnnotation注解类型 if (ann instanceof MyAnnotation) { System.out.println(ann); System.out.println(((MyAnnotation) ann).name()); System.out.println(((MyAnnotation) ann).age()); } } } }
时间: 2024-11-06 19:28:45