它们的定义annotation它由三部分组成: 它们的定义annotation、使用annotation班、annotation的处理方法。
一、自己定义annotation
元注解包含下面:
1)@Target 描写叙述注解使用的范围
取值包含:
1.CONSTRUCTOR:用于描写叙述构造器
2.FIELD:用于描写叙述域
3.LOCAL_VARIABLE:用于描写叙述局部变量
4.METHOD:用于描写叙述方法
5.PACKAGE:用于描写叙述包
6.PARAMETER:用于描写叙述參数
7.TYPE:用于描写叙述类、接口(包含注解类型) 或enum声明
2) @Retention 定义了注解被保留的时间段
取值包含:
1.SOURCE:在源文件里有效(即源文件保留)
2.CLASS:在class文件里有效(即class保留)
3.RUNTIME:在执行时有效(即执行时保留)
3)@Documented 能否够被工具文档化
4)@Inherited 注解能否够被子类继承
实例代码:
-
@Target(ElementType.FIELD)
-
@Retention(RetentionPolicy.RUNTIME)
-
@Documented
-
public @interface FruitName {
-
-
public String value() default "";
-
-
}
-
-
@Target(ElementType.FIELD)
-
@Retention(RetentionPolicy.RUNTIME)
-
@Documented
-
public @interface FruitColor {
-
-
public enum Color {BULE, RED, GREEN}
-
-
public Color fruitColor() default Color.GREEN;
-
-
}
二、使用annotation的类
实例代码:
-
public class Apple {
-
-
@FruitName("Apple")
-
private String appleName;
-
-
@FruitColor(fruitColor=FruitColor.Color.RED)
-
private String appleColor;
-
-
public void setAppleColor(String appleColor) {
-
this.appleColor = appleColor;
-
}
-
public String getAppleColor() {
-
return appleColor;
-
}
-
-
-
public void setAppleName(String appleName) {
-
this.appleName = appleName;
-
}
-
public String getAppleName() {
-
return appleName;
-
}
-
-
public void displayName(){
-
System.out.println("水果的名字是: "+ appleName + " 水果的颜色是:"+ appleColor);
-
}
-
-
}
三、annotation处理方法
实例代码:
-
public class FruitInfoUtil {
-
-
public static void getFruitInfo(Object obj){
-
Class<?
> clazz = obj.getClass();
-
Field[] fields = clazz.getDeclaredFields();
-
-
for(Field field : fields){
-
if(field.isAnnotationPresent(FruitName.class)){
-
FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);
-
try {
-
field.setAccessible(true);
-
field.set(obj, fruitName.value());
-
} catch (IllegalArgumentException e) {
-
e.printStackTrace();
-
} catch (IllegalAccessException e) {
-
e.printStackTrace();
-
}
-
}else if(field.isAnnotationPresent(FruitColor.class)){
-
FruitColor fruitColor = (FruitColor)field.getAnnotation(FruitColor.class);
-
try {
-
field.setAccessible(true);
-
field.set(obj, fruitColor.fruitColor().toString());
-
} catch (IllegalArgumentException e) {
-
e.printStackTrace();
-
} catch (IllegalAccessException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
-
}
LAST: main方法
-
public class Main {
-
-
public static void main(String[] args) {
-
Apple apple = new Apple();
-
-
FruitInfoUtil.getFruitInfo(apple);
-
-
apple.displayName();
-
-
}
-
}
执行结果:
水果的名字是: Apple 水果的颜色是:RED
上传下别人总结的annotation的一张图,很直观
版权声明:本文博客原创文章,博客,未经同意,不得转载。