实现注解需要三个条件:注解声明、使用注解的元素、操作注解使其起作用(注解处理器)。
定一个MyTag注解类:
[java] view plain copy
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Target({ElementType.METHOD,ElementType.FIELD})
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- public @interface MyTag {
- String name() default "车";
- int size() default 10;
- }
定义一个实体Car类:
[java] view plain copy
- public class Car {
- private String name;
- private int size;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getSize() {
- return size;
- }
- public void setSize(int size) {
- this.size = size;
- }
- public Car(){
- }
- public Car(String name, int size){
- this.size = size;
- this.name = name;
- }
- @Override
- public String toString() {
- return "Car [name=" + name + ", size=" + size + "]";
- }
- }
定义一个使用注解的类AnnotationDemo类:
[java] view plain copy
- public class AnnotationDemo{
- @MyTag(name = "audi", size = 10)
- private Car car;
- public Car getCar() {
- return car;
- }
- public void setCar(Car car) {
- this.car = car;
- }
- @Override
- public String toString() {
- return "Annotation [car=" + car + "]";
- }
- }
定义一个操作注解即让注解起作用的类AnnotationProccessor类:
[java] view plain copy
- import java.lang.reflect.Field;
- public class AnnotationProccessor {
- public static void annoProcess(AnnotationDemo annotation){
- for(Field field : annotation.getClass().getDeclaredFields()){
- if(field.isAnnotationPresent(MyTag.class)){ //如果存在MyTag标签
- MyTag myTag = field.getAnnotation(MyTag.class);
- annotation.setCar(new Car(myTag.name(),myTag.size()));
- }
- }
- }
- public static void main(String[] args) {
- AnnotationDemo ann = new AnnotationDemo();
- annoProcess(ann);
- System.out.println(ann.getCar());
- }
- }