美文网首页
Java基础-注解

Java基础-注解

作者: 森屿暖茶 | 来源:发表于2021-01-28 09:32 被阅读0次

    注解是什么?

    Java注解(Annotation)又称为Java标注。可以从字面的意思理解它,其实就是一个标注。他可以根据定义作用于不同的地方。注解对他们注解的代码没有直接影响。注解是JDK 5中引入的标注注释机制。

    一句话概括:注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。

    注解的意义,如何使用注解。

    注解就是对某个对象的一个标注。当我们对这个对象有一些特殊需求时,我们可以通过注解区分,来实现这些需求。举个栗子,如butterknife 的view注入、arouter的辅助类生成、反射获取特定信息然后操作等。

    public @interface doClick{ } // @interface  创建一个注解

    元注解:对注解类的注解。你可以这么简单的理解。元注解有以下几个注解:

    @Target  被元注解  注解的注解的作用范围

    @Retention 被元注解  注解的注解的存储阶段

    @Inherited 被元注解  注解的注解所作用的类是否可以被继承(这里指的是注解能否被继承过去,不是指的类是否可以被继承)一般不使用

    @Documented 被元注解  注解的注解所作用的类为工具化文档  一般不使用。

    下面主要描述@Target 和@Retention注解

    @Target注解:被@Target注解的作用范围
    ElementType.ANNOTATION_TYPE 可以应用于注解类型。

    ElementType.CONSTRUCTOR 可以应用于构造函数。

    ElementType.FIELD 可以应用于字段或属性。

    ElementType.LOCAL_VARIABLE 可以应用于局部变量。

    ElementType.METHOD 可以应用于方法级注解。

    ElementType.PACKAGE 可以应用于包声明。

    ElementType.PARAMETER 可以应用于方法的参数。

    ElementType.TYPE 可以应用于类的任何元素。

    @Retention 

    RetentionPolicy.SOURCE - 标记的注解仅保留在源级别中,(编译器语法检查)

    RetentionPolicy.CLASS - 标记的注解在编译时由编译器保留,但 Java 虚拟机(JVM)会忽略。(在编译时可以通过注解实现一些特殊需求,比如辅助类、脚本、配置文件等。<arouter、butterknife的view注入>)

    RetentionPolicy.RUNTIME - 标记的注解由 JVM 保留,因此运行时环境可以使用它。(反射获取注解信息 进行特定的操作)

    SOURCE 、CLASS 详见其他框架解析使用.

    RUNTIME 结合反射的简单使用。

    如有这么一个注解

    @Retention(RetentionPolicy.RUNTIME)

    @Target(ElementType.FIELD)

    public @interface ExtrasParams {Stringvalue()default "";}

    @ExtrasParams

    public class A extends Activity{

    @ExtrasParams

    private string name="123";

    }

    void main(Activity activity){

    Class cls=activity.getClass();

    Field[] declaredFields=cls.getDeclaredFields();

    //循环Field[] 找到被注解的属性或者字段。

    for(Field field:declaredFields){

        //判断属性是否被 ExtrasParams注解

        if (field.isAnnotationPresent(ExtrasParams.class)) {

            //获取到ExtrasParams 注解  此时field就是name

            ExtrasParams extrasParams =  field.getAnnotation(ExtrasParams.class);

              .....然后进行你需要的操作。

      }

    }

    }

    相关文章

      网友评论

          本文标题:Java基础-注解

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