Java 8新特性 - (6)类型注解

Java 8新特性 - (6)类型注解

May 28, 2021

什么是类型注解

在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;从java 8开始,注解可以应用在任何地方。但是需要注意的是,类型注解只是语法而不是语义,并不会影响java的编译时间,加载时间,以及运行时间,也就是说,编译成class文件的时候并不包含类型注解。换句话说,仅提供定义这些类型的注释的功能,然后由框架和工具开发者来实际上使用它们。

主要的场景:

  1. 创建类实例:
new @Interned MyObject();
  1. 类型定义:
@NotNull String str1 = ...
@Email String str2 = ...
  1. 类型转换:
myString = (@NonNull String) str;
  1. 泛型
List<@Email String> emails = ...
  1. 包括参数边界和通配符边界
class Folder<F extends @Existing File> { ... }
Collection<? super @Existing File> c = ...
List<@Immutable ? extends Comparable<T>> unchangeable = ...
  1. instanceof 语句
boolean isNonNull = myString instanceof @NonNull String;
boolean isNonBlankEmail = myString instanceof @NotBlank @Email String;
  1. 继承
class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... }
  1. 抛出异常:
void monitorTemperature() throws @Critical TemperatureException { ... }
  1. 方法引用
@Vernal Date::getDay
List<@English String>::size
Arrays::<@NonNegative Integer>sort

新增ElementType.TYPE_USE 和ElementType.TYPE_PARAMETER

新增的两个注释的程序元素类型 ElementType.TYPE_USE 和 ElementType.TYPE_PARAMETER 用来描述注解的新场合 。 ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中。 ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中(比如:声明语句、泛型和强制转换语句中的类型)。

@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
@interface MyAnnotation {}

类型注解的作用

类型注解被用来支持在Java的程序中做强类型检查。配合第三方插件工具Checker Framework,可以在编译的时候检测出runtime error(比如UnsupportedOperationException,NumberFormatException,NullPointerException异常等都是runtime error),以提高代码质量。这就是类型注解的作用。


参考:

最后更新于