註解實現例項
實現註解需要三個條件:註解宣告、使用註解的元素、操作註解使其起作用(註解處理器)。 定一個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());
}
}