zoukankan      html  css  js  c++  java
  • 注解实现实例

     

    实现注解需要三个条件:注解声明、使用注解的元素、操作注解使其起作用(注解处理器)。
     
    定一个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());

    }
    }

  • 相关阅读:
    falsh developer 快捷键
    FlashDevelop安装配置
    EditPlus保存时不生成bak文件(转)
    微信oauth2验证
    通过TortoiseSVN checkout的文件前面没有“状态标识”
    CSS3 Media Query 响应式媒体查询
    回车事件、键盘事件
    shiro登录密码加密
    mybatis常用类起别名
    shiro(四)项目开发中的配置、
  • 原文地址:https://www.cnblogs.com/liuys635/p/10248006.html
Copyright © 2011-2022 走看看