它们的定义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 注解能否够被子类继承
实例代码:
[java] view
plaincopy
- @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的类
实例代码:
[java] view
plaincopy
- 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处理方法
实例代码:
[java] view
plaincopy
- 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方法
[java] view
plaincopy
- public class Main {
public static void main(String[] args) {
Apple apple = new Apple();
FruitInfoUtil.getFruitInfo(apple);
apple.displayName();
}
}
执行结果:
水果的名字是: Apple 水果的颜色是:RED
上传下别人总结的annotation的一张图,很直观
版权声明:本文博客原创文章,博客,未经同意,不得转载。