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

原文: https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html

在 Java SE 8 发行版之前,注解只能应用于声明。从 Java SE 8 发布版开始,注解也可以应用于任何类型。这意味着可以在使用类型的任何位置使用注解。使用 where 类型的几个示例是类实例创建表达式(new),强制转换,implements子句和throws子句。这种注解形式称为类型注解注解基础知识中提供了几个示例。

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

例如,您希望确保程序中的特定变量永远不会分配给 null;你想避免触发NullPointerException。您可以编写自定义插件来检查此问题。然后,您将修改代码以注解该特定变量,表明它永远不会分配给 null。变量声明可能如下所示:

  1. @NonNull String str;

当您编译代码(包括命令行中的NonNull模块)时,编译器会在检测到潜在问题时输出警告,允许您修改代码以避免错误。在更正代码以删除所有警告后,程序运行时不会发生此特定错误。

您可以使用多个类型检查模块,其中每个模块检查不同类型的错误。通过这种方式,您可以构建在 Java 类型系统之上,在您希望的时间和地点添加特定的检查。

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

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