14.3.5 Java8新增的类型注解
14.3.5 Java8新增的类型注解
Java8
为ElementType
枚举增加了TYPE_PARAMETER
、TYPE_USE
两个枚举值,这样就允许定义枚举时使用@Target(ElementType.TYPE_USE
)修饰,这种注解被称为类型注解(Type Annotation
),类型注解可用于修饰在任何地方出现的类型。
Java 8为增加的ElementType 枚举值 |
描述 |
---|---|
TYPE_PARAMETER |
Type parameter declaration |
TYPE_USE |
Use of a type |
在Java8
以前,只能在定义各种程序元素(定义类、定义接口、定义方法、定义成员变量……)时使用注解。从Java8
开始,类型注解可以修饰在任何地方出现的类型。比如,允许在如下位置使用类型注解。
- 创建对象(用
new
关键字创建) - 类型转换。
- 使用
implements
实现接口 - 使用
throws
声明抛出异常。
上面这些情形都会用到类型,因此都可以使用类型注解来修饰。
程序
下面程序将会定义一个简单的类型注解,然后就可在任何用到类型的地方使用类型注解了,读者可通过该示例了解类型注解无处不在的神奇魔力。
1 | import java.util.*; |
上面的程序中都是可正常使用类型注解的例子,从这个示例可以看到,Java
程序到处“写满”了类型注解,这种“无处不在”的类型注解可以让编译器执行更严格的代码检查,从而提高程序的健壮性
需要指出的是,上面程序虽然大量使用了@NotNull
注解,但这些注解暂时不会起任何作用——因为并没有为这些注解提供处理工具。而且Java8
本身并没有提供对类型注解执行检査的框架,因此如果需要让这些类型注解发挥作用,开发者需要自己实现类型注解检査框架
幸运的是,Java8
提供了类型注解之后,第三方组织在发布他们的框架时,可能会随着框架一起发布类型注解检査工具,这样普通开发者即可直接使用第三方框架提供的类型注解,从而让编译器执行更严格的检查,保证代码更加健壮