原創:轉載需注明原創地址 https://www.cnblogs.com/fanerwei222/p/11492274.html
准備材料:
實體類: PrintDemo
注解類: PrintName
注解處理器: AnnotationUtil
注解測試類: AnnotationMain
直接上代碼:
package annotation; /** * TODO * 打印demo */ public class PrintDemo { @PrintName(print = true) private String what; @PrintName(print = false) private String noWhat; @PrintName(print = true) private String onThere; public String getWhat() { return what; } public void setWhat(String what) { this.what = what; } public String getNoWhat() { return noWhat; } public void setNoWhat(String noWhat) { this.noWhat = noWhat; } public String getOnThere() { return onThere; } public void setOnThere(String onThere) { this.onThere = onThere; } }
package annotation; import java.lang.annotation.*; /** * TODO * 打印字段名稱 */ @Retention(RetentionPolicy.RUNTIME) @Documented @Target(ElementType.FIELD) public @interface PrintName { boolean print(); }
package annotation; import java.lang.reflect.Field; /** * TODO * 注解處理器工具類 */ public class AnnotationUtil { public static void executeAnnotaPrint(Class<?> clazz){ Field[] fields = clazz.getDeclaredFields(); for (Field field : fields){ if (field.isAnnotationPresent(PrintName.class) && field.getAnnotation(PrintName.class).print()){ System.out.println("通過注解打印字段的名稱: " + field.getName()); } } } }
package annotation; /** * TODO * 注解main測試方法 */ public class AnnotationMain { public static void main(String[] args){ AnnotationUtil.executeAnnotaPrint(PrintDemo.class); } }
效果如下:
結束🔚