类型 注解 和可插入类型系统

在 Java SE 8 发行版之前,注解 只能应用于声明。从 Java SE 8 版本开始,注解 也可以应用于任何* type use 。这意味着 注解 可以在使用类型的任何地方使用。使用类型的几个示例是类实例创建表达式(new),强制类型转换,implements子句和throws子句。这种形式的 注解 称为类型 注解*,并且在Annotations Basics中提供了几个示例。

创建类型 注解 以支持改进的 Java 程序分析,以确保更强的类型检查。 Java SE 8 发行版不提供类型检查框架,但允许您编写(或下载)类型检查框架,该框架被实现为与 Java 编译器结合使用的一个或多个可插拔模块。

例如,您要确保程序中的特定变量永远不会分配为 null;您要避免触发NullPointerException。您可以编写一个自定义插件进行检查。然后,您将修改代码以 注解 该特定变量,指示该变量从未分配为 null。变量声明可能如下所示:

@NonNull String str;

当您在命令行上编译包括NonNull模块在内的代码时,如果编译器检测到潜在问题,则会打印一条警告,允许您修改代码以避免错误。在更正代码以删除所有警告之后,该程序运行时将不会发生此特定错误。

您可以使用多个类型检查模块,其中每个模块检查不同类型的错误。这样,您可以在 Java 类型系统的基础上构建,在需要的时间和位置添加特定的检查。

通过明智地使用类型 注解 和可插入类型检查器,您可以编写更强大且更不易出错的代码。

在许多情况下,您不必编写自己的类型检查模块。有第三方为您完成了工作。例如,您可能想利用华盛顿大学创建的 Checker 框架。该框架包括NonNull模块,正则表达式模块和互斥锁模块。有关更多信息,请参见Checker Framework