本文共 3644 字,大约阅读时间需要 12 分钟。
从JDK1.5之后,注解在各大框架上得到了广泛的应用。下面这个例子中,你可以判断一个类或者方法或者字段上有没有注解,以及怎么获取上面的注解值。话不多说,代码如下:
AnnotationTest01.java
package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.METHOD,ElementType.PARAMETER})public @interface AnnotationTest01 { String color();}AnnotationTest02.java
package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface AnnotationTest02 { String getUserName();}AnnotationTest04.java
package com.zkn.newlearn.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.FIELD})public @interface AnnotationTest04 { String getAddress();}AnnotationTest03.java
package com.zkn.newlearn.annotation;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 测试Annotation * @author zkn * */@AnnotationTest02(getUserName="zhangsan")public class AnnotationTest03 { @AnnotationTest01(color="red") public static String testColor(String color){ System.out.println(color); return color; } @AnnotationTest04(getAddress="北京市海淀区") String address; public static void main(String[] args) { //获取方法上的注解值 Method[] methods = AnnotationTest03.class.getDeclaredMethods(); if(methods != null){ for(Method method : methods){ AnnotationTest01 annotation = method.getAnnotation(AnnotationTest01.class); if(annotation == null) continue; Method[] me = annotation.annotationType().getDeclaredMethods(); for(Method meth : me){ try { String color = (String) meth.invoke(annotation,null); System.out.println(color); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } //获取类上的注解值 AnnotationTest02 anno = AnnotationTest03.class.getAnnotation(AnnotationTest02.class); if(anno != null){ Method[] met = anno.annotationType().getDeclaredMethods(); for(Method me : met ){ if(!me.isAccessible()){ me.setAccessible(true); } try { System.out.println(me.invoke(anno, null)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } //获取字段上的注解值 AnnotationTest03 noon = new AnnotationTest03(); Field[] field = AnnotationTest03.class.getDeclaredFields(); if(field != null){ for(Field fie : field){ if(!fie.isAccessible()){ fie.setAccessible(true); } AnnotationTest04 annon = fie.getAnnotation(AnnotationTest04.class); Method[] meth = annon.annotationType().getDeclaredMethods(); for(Method me : meth){ if(!me.isAccessible()){ me.setAccessible(true); } try { //给字段重新赋值 fie.set(noon, me.invoke(annon, null)); System.out.println(fie.get(noon)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } }}
转载地址:http://zhlox.baihongyu.com/