您的位置  > 互联网

编译器被丢弃的几种类型,你知道吗?

:注解声明(应用于另一个注解)

:类型参数声明(1.8新增)

:类型用法声明(1.8新增)

PS:当注解不指定值时,这个注解可以用在任何元素上,就是上面的类型。

@

表示注释信息需要保存在什么级别,由枚举定义

:注解将被编译器丢弃(此类注解信息只会保留在源代码中,源代码编译后,注解信息将被丢弃,不会保留在编译后的类文件中)

CLASS:注释在类文件中可用,但会被VM丢弃(此类注释信息将保留在源代码和类文件中,并且在执行过程中不会加载到虚拟机(JVM)中)

:VM在运行时也会保留注解信息,因此可以通过反射机制读取注解信息(源代码、类文件、执行时都有注解信息)

PS:当注解没有定义值时,默认值为CLASS

@

表示注释将包含在文档中

@

允许子类继承父类的注解

2. 注释元素

– 可用的注释元素类型如下:

– 所有基本类型(int、float、byte、char、long、short)

- 班级

– 枚举

– 上述类型的数组

如果使用其他类型,编译器会报错。 也不允许使用任何包装类型。 注解也可以用作元素类型,即注解可以嵌套。

元素修饰符只能与 or 一起使用。

– 默认值限制

编译器对元素的默认值有点挑剔。 首先,元素不能具有不确定的值。 也就是说,元素必须具有默认值或在使用注释时提供元素的值。

其次,对于非基本类型的元素,无论是在源码中声明,还是在注解接口中定义默认值,都不能使用null作为值。 这是一个限制,使得处理器很难表示元素是否存在,因为在每个注释声明中,所有元素都存在并具有相应的值。 为了绕过这个限制,你只能定义一些特殊值,例如空字符串或负数,来指示元素不存在。

@(。)

@(。)

@{

int id() -1;

()“”;

3. 快捷键

什么是快捷方式?我们先看下面的注释

@({。类型})

@(。)

@

@

@{

价值() ””;

您可以看到,应用于类、接口、注释和枚举时,该策略是运行时的并且具有类型值元素。 这基本上就是正常使用时的样子:

@(“/你的/路径”)

班级 { }

这是省略名称-值对语法的快捷方式。 下面给出详细解释:

注解中定义了一个名为value的元素,应用注解时,如果该元素是唯一需要赋值的元素,那么此时就不需要使用名值对语法,而只需使用需要给的只是输出所需要的value元素的值。 当然,这可以应用于任何合法类型的元素,但条件是元素名称必须是值。

4.JDK1.8注解增强

JDK1.8中又多了两个枚举成员,它们用于限制可以注释的类型。 例如,如果您想注释泛型类型参数:

类三{}

然后,在定义@时,必须设置。 @中,表示该注解可以用来注解类型参数。 例如:

@(。)

@(。)

@是 {}

。 用来注释各种类型,所以上面的例子也可以改为,设置一个注释,只要是类型名就可以注释。 例如有如下注解定义:

@(。)

@(。)

@测试{}

那么下面的使用注释是可能的:

列表list1 = new();

列表