1. 程式人生 > >註解實現例項

註解實現例項

 

實現註解需要三個條件:註解宣告、使用註解的元素、操作註解使其起作用(註解處理器)。   定一個MyTag註解類:

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類:

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類:
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類:
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());

}
}