美文网首页Android实用技术
日更(十六)-Android-注解

日更(十六)-Android-注解

作者: Jlanglang | 来源:发表于2019-01-16 22:56 被阅读74次

    瞎扯

    记得刚学java的时候,看过注解,但完全不明白是啥玩意.弄不明白
    后来写android.经常看到,
    直到有次用aop切面,才真正明白是个啥东西.

    注解的意义

    在java里面.如果给一个class添加属性,功能
    一般我们要么去实现某个接口,要么添加一个成员变量.
    这样就能达到目的.

    但是有时我可能不想这样.我想更自由一点..
    怎么办呢.

    注解!

    注解的作用其实就是给类,方法,变量,添加额外的附加属性.
    然后我再通过拿到这个附加属性,进行额外的操作.

    举个例子:

    我想给一个类,添加一个额外的附加属性.
    当然我也可以实现某个接口,然后复写方法来实现,或者写一个抽象方法.但我觉得这样太麻烦.用注解来实现

    定义一个注解

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface Type {
        /**
         * 直接绑定itemclass
         *
         * @return
         */
        Class iClass() default Object.class;
    }
    

    用在类上

    @Type (iClass = A.class)
    public class Test{
    }
    
    public class A{
    }
    

    获取注解

      public  Class getTypeClass(Object itemData) {
                Class iClass = null;
                //判断是否使用了注解
                Type annotation = itemData.getClass().getAnnotation(Type .class);
                if (annotation != null) {
                    iClass= annotation.iClass();
                }
            }
            return iClass;
        }
    
    public void test(){
        Test test=   new Test ();//创建对象
        Class iClass = getTypeClass(test);//获取class
    }
    

    这样我们就能拿到注解中声明的Class了.

    拿到Class能干吗?

    能干的事多了.java的springMVC.几乎全是注解.原理大致如此.

    比如通过class创建对象,

    最简单的class.newInstance();

    常用的注解

    细心你就会发现,注解上还有注解.是干嘛的呢,

    @Retention

    • RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
    • RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
    • RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。

    上面这段,别的地方抄来的.

    我们实际使用时,多数只用到最后一个.也就是运行时还能获取

    @Target

    • ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
    • ElementType.CONSTRUCTOR 可以给构造方法进行注解
    • ElementType.FIELD 可以给属性进行注解
    • ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
    • ElementType.METHOD 可以给方法进行注解
    • ElementType.PACKAGE 可以给一个包进行注解
    • ElementType.PARAMETER 可以给一个方法内的参数进行注解
    • ElementType.TYPE 可以给一个类进行注解,比如:类、接口、枚举

    上面这段还是别的地方搬来的.

    常用的就 :FIELD 方法 , TYPE 类 , METHOD 成员变量

    注解的属性

    记住几点就行,

        Class iClass() default Object.class;
    
        int value() default -1;
    

    1.基础类型
    2.class.
    3.数组.
    4.注解

    default关键字可以不写,不过最好还是写上.作用就是设一个默认值

    总结:

    注解对于解耦来说,非常好.动态代理基本也是依赖注解来实现的.
    通俗的讲,注解就是给一个东西打标记
    有了标记.就能很方便的做处理.

    也不算什么很高深的东西

    您的喜欢与回复是我最大的动力-_-
    交流群:493180098

    相关文章

      网友评论

        本文标题:日更(十六)-Android-注解

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