美文网首页
java-注解

java-注解

作者: EvilsoulM | 来源:发表于2015-11-29 23:31 被阅读96次

    注解分类

    源码注解:注解只在源码中存在,在class中就不存在了
    编译时注解:注解在源码和class文件中都存在
    运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解

    自定义注解

    /****元注解****/
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    /****************/
    public @interface Description {
        String desc();//成员变量 无参数无异常的方式声明
        String author();
        int age() default 18;//设置默认值
    }
    

    成员类型包含基本类型,String,Class,Annotation,Enumeration

    如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)

    元注解

    @Target 作用域
    CONSTRUCTOR 构造方法声明
    FIELD字段声明
    LOCAL_VARIABLE局部变量声明
    METHOD方法声明
    PACKAGE包声明
    PARAMETER参数声明
    TYPE类,接口

    @Retention 生命周期(注解分类)
    SOURCE
    CLASS
    RUNTIME

    @Inherited 容许子类继承

    @Documented 生成javadoc时会包含注解

    解析注解

    public static void main(String[] args) {
        try {
            Class c = Class.forName("com.evilsoulm.anotationdemo.MainActivity");
            //找到类上的注解        boolean isExist = c.isAnnotationPresent(Description.class);
            if (isExist) {
                //拿到注解实例
                Description d = (Description) c.getAnnotation(Description.class);
                System.out.println("descrition:" + d.desc());
            }
            Method[] ms = c.getMethods();
            for (Method m : ms) {
                boolean isMethodExist = m.isAnnotationPresent(Description.class);
                if (isMethodExist) {
                    //拿到注解实例                Description d = m.getAnnotation(Description.class);
                    System.out.println("descrition:" + d.desc());
                }
            }
            //解析方式2
            for (Method m : ms) {
                Annotation[] as = m.getAnnotations();
                for (Annotation a : as) {
                    if (a instanceof Description) {
                        Description d = (Description) a;
                        System.out.println("descrition:" + d.desc());
                    }
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    @Description(desc = "EvilsoulM")
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
        }
        @Description(desc = "i am eyeColor", age = 24)
        public void eyeColor() {
        }
    }
    
    descrition:EvilsoulM
    descrition:i am eyeColor
    descrition:i am eyeColor
    

    eg:http://knight-black-bob.iteye.com/blog/2229834

    相关文章

      网友评论

          本文标题:java-注解

          本文链接:https://www.haomeiwen.com/subject/tocjhttx.html