应用场景:
我们在通过一个key值取得其对应的值时,很容易想到用HashMap,或者用enmu, 但这两者都有不方便的地方,往往要加一大段代码,如果能用注解来搞定,不仅能省很多代码,且看上去也很直接,实现方法如下:
1.先定义一个注解:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface TestAnnotation { public String description() default ""; }
定义了一个叫TestAnnotation的注解,其有个属性是description, 默认值是""
2.接下来,我们就可以把这个注解应用上去了:
public class Demo { @TestAnnotation(description="hello world") public final static String name = "zf"; }
3.接下来要做的事就是通过反射来获取其description了:
import java.lang.reflect.Field; public class DescAnnotation { public static <T> String getDescription(Class<T> klass, String str) { Field[] f = klass.getFields(); for (Field field : f) { String v = null; try { v = field.get(klass).toString(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } if (field.isAnnotationPresent(TestAnnotation.class) && str.equals(v)) { TestAnnotation desc = field.getAnnotation(TestAnnotation.class); String d = desc.description(); return d; } } return null; } public static void main(String[] args) { System.out.println(DescAnnotation.getDescription(Demo.class, Demo.name)); System.out.println(DescAnnotation.getDescription(Demo.class, "zf")); } }
以上就是全部代码,我相信在自动化测试中,有很多的地方应用到我们自定义的注解,大家慢慢去体会吧!