在Java SE 8发布之前,注解只能应用于声明。从Java SE 8版本开始,注解可以应用于任何类型的使用。这意味着注解可以在您使用类型的任何位置使用。使用类型的几个示例是类实例创建表达式(new),casts,implements clauses和throws子句。这种注解形式称为类型注解,并在注解基础中提供了几个示例。
创建一个类型注解,以支持改进Java程序分析方式,确保更强大的类型检查。 Java SE 8版本不提供类型检查框架,但它允许您编写(或下载)一种类型检查框架,该框架实现为与Java编译器结合使用的一个或多个可插拔模块。 例如,您希望确保程序中的特定变量永远不会分配给null ; 你想避免触发NullPointerException。您可以编写一个自定义插件来检查。然后,您将修改代码以注解该特定变量,表示它从未分配给null。变量声明可能如下所示:
@NonNull String str;
当您编译代码时,包括NonNull模块在命令行中,如果编译器检测到潜在问题,则会打印出警告,从而允许您修改代码以避免错误。在更正代码以平息所有警告后,程序运行时不会发生此特定错误。
您可以使用多个类型检查模块,其中每个模块检查其他类型的错误。这样,您可以建立在Java类型系统之上,添加特定检查的时间和地点。
通过明确使用类型注解和可插拔类型检查器的存在,您可以编写更强大,更不容易出错的代码。
在许多情况下,您不必编写自己的类型检查模块。有第三方为你做了工作。例如,您可能希望利用华盛顿大学创建的Checker框架。该框架包括一个NonNull模块,以及一个正则表达式模块和一个互斥锁模块。有关更多信息,请参阅Checker框架。