专栏首页懒人开发Eventbus3代码分析(二):注解入门

Eventbus3代码分析(二):注解入门


注解

我们扯淡到java的知识,最好是先参考别人的文章,或者看官方的 自己能力有限,所以只是简单扯扯,有兴趣,最好自己看官方的解释

我们先看一下java官方的api http://docs.oracle.com/javase/8/docs/api/index.html

对应的注解,在lang包下


具体注解 interface Annotation
  • 我们可以知道是since1.5, 也就是java 5.0 才有的 新特性
    • (其实,现在都java8了, 很多东西我们都很少用, java里面真的有很多好东西,只是不经常用,谁能说自己用了java中 5%的类?)
  • 对应的方法,其他3个都很简单,和Object中的差不多, equals, hashCode,toString,这里就不多扯淡了(建议看 马士兵 的java基础,自己原来也是这样过来的,虽然很啰嗦,但是讲得很细)
  • 重要的是 annotationType()方法,返回 继承Annotation 的泛型类 的Class(其实都是接口,但是都是用的反射中Class的类型)

Annotation 相关类

因为重点是Eventbus,所以简单了解下使用即可 (有时间看自己的能力,再能不能写注解和反射的分析)

这里面,先看几个接口:(都是带@的, 比较好玩)

  • @interface Target:
    • 所有Annotation 子类上面,都有 @Target(ElementType.ANNOTATION_TYPE)
    • 枚举类ElementType,也在包中
public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}
  • 这里类型比较多,上面也有注释,只是说明下经常用到的
    • ElementType.TYPE :用于描述类、接口或enum声明
    • ElementType.FIELD :用于描述实例变量
    • ElementType.METHOD :用于描述方法(eventbus的@interface Subscribe 就是用的这个)
  • @interface Retention :
    • 所有Annotation 子类上面,都有 @Retention(RetentionPolicy.RUNTIME)
    • 枚举类RetentionPolicy,也在包中
public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}
  • 3中类型也很好猜
  • 例如,我们的@Override
  • 这里@Override 是放在方法上,用于源码阶段
  • @interface Documented
    • 将注解信息添加在java文档
  • @interface Inherited
    • 完全没使用过,略

前面4个是java5开始的,后面2个是java8才有的, 自己也没有怎么试用过(这2个不扯淡了)

  • @interface Repeatable : 转化数组用
  • @interface Native

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 通过先序中序序列生成二叉树

      二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证。

    Rekent
  • Java 冒泡排序与快速排序的实现

          (1)基于交换思想的排序算法         (2)从一端开始,逐个比较相邻的两个元素,发现倒序即交换。           (3)一次遍历,一定能...

    Rekent
  • 详尽! Win10安装Java8+Tomcat9!

    Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

    SeanDepp
  • Java TCP通信概念及实例

                  <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。

    Rekent
  • Java 线程池的实现

            任务接口:每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等。 工作线程通过该接口调度任务的执行。

    Rekent
  • 栈的Java简单实现

      进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。

    Rekent
  • 使用Solr涡轮增压您的WordPress搜索

    由于无法建议搜索短语,捕捉拼写错误,理解单词变体,组织和过滤结果以及索引搜索结果文档,因此WordPress内置的标准搜索无法为访问者提供最佳搜索体验。全文搜索...

    GongAo啊_
  • Java 实现二叉树的构建以及3种遍历方法

    大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下...

    Rekent
  • Java 循环队列的实现

      队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空...

    Rekent
  • Java UDP的简单实例以及知识点简述

      Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类。

    Rekent

扫码关注云+社区

领取腾讯云代金券