欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tip小杂记——java注解探索(一)

程序员文章站 2024-03-13 16:13:09
...

在java的代码中,总是能看见注解的使用,流行的框架,项目中自定义的注解等,注解在java中担当了重要的作用,所以我决定了解学习注解。

注解需要使用@interface来声明,如

public @interface MyHello {
  int value() default 0;
}

注解中的方法有几点需要注意的。

  • 不能有异常的抛出
  • 方法的返回类型是基础类型,字符串,类,枚举和数组
  • 方法不能有参数
  • 可以给方法分配默认值

注解也分为几种类型,有标记型、单值型和多值型的,接下来分别介绍一下。

  • 标记型
public @interface Initable {}

标记型注解中没有方法,只是用来标记被注解的地方,可以根据此注解对被标记处进行相应处理。

  • 单值型
public @interface MyHello {
  int value() default 0;
}

@MyHello(value = 12)

该注解只有一个值定义。

  • 多值型
public @interface MyHello {
  int value() default 0;
  String name() default "";
}

@MyHello(value = 12, name = "cloneable")

该注解中有多个值的定义。

java本身提供了几个注解,专门用以定义注解。

  • @Target
    Target是用来声明注解的类型,也就是可以被使用的地方。Target注解中的值是ElementType枚举,有如下几个值。
    类型值 表示注解可作用的地方
    TYPE 类,接口(包括注解类型)和枚举
    FIELD 域(包括枚举常量)
    METHOD 方法
    PARAMETER 参数
    CONSTRUCTOR 构造方法
    LOCAL_VARIABLE 局部变量
    ANNOTATION_TYPE 注解类型
    PACKAGE

可以只声明注解作用于一个地方,也可以声明注解可作用于多个地方。

@Target(ElementType.FIELD)
public @interface MyHello {
  int value() default 0;
  String name() default "";
}

@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MyHello {
  int value() default 0;
  String name() default "";
}
  • @Retention
    Retention用于声明注解的被保留的级别,注解中的值是RetentionPolicy枚举,有如下几个值。
    类型 保留级别
    SOURCE 源文件可用,在编译时注解失效
    CLASS 在class文件中可用,注解被保留在class文件中,但虚拟机中不可用,是默认级别
    RUNTIME 在运行时可用,在编译时和虚拟机运行时都可用
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyHello {
  int value() default 0;
  String name() default "";
}
  • @Inherited
    表示被注解的类的子类自动被此注解作用。
  • @Document
    标记注解被包含在文档中。
相关标签: java注解