日更(十六)-Android-注解

瞎扯

记得刚学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

猜你喜欢

转载自blog.csdn.net/weixin_34342905/article/details/86984783