javaSE_8系列博客——Java语言的特性(四)--注解--(4)-- 类型注解和可插拔类型系统
来源:互联网 发布:黑苹果mac os 11.12 编辑:程序博客网 时间:2024/05/18 21:43
在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框架。
- javaSE_8系列博客——Java语言的特性(四)--注解--(4)-- 类型注解和可插拔类型系统
- javaSE_8系列博客——Java语言的特性(四)--注解--(1)--基础知识
- javaSE_8系列博客——Java语言的特性(四)--注解--(5)-- 如何使用自定义的注解?
- javaSE_8系列博客——Java语言的特性(四)--注解--(2)-- 声明一个注解
- javaSE_8系列博客——Java语言的特性(四)--注解--(3)-- 预定义注解
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(4)--使用接口作为类型
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--枚举类型
- JavaSE_8系列博客——Java语言的特性(六)--泛型(3)--泛型和类型通配符
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
- javaSE_8系列博客——Java语言的特性(三)--类和对象(4)--声明成员变量
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识
- javaSE_8系列博客——Java语言的特性(三)--类和对象(3)--类的声明
- javaSE_8系列博客——Java语言的特性(三)--类和对象(9)--对象的创建
- javaSE_8系列博客——Java语言的特性(三)--类和对象(10)--对象的使用
- javaSE_8系列博客——Java语言的特性(三)--类和对象(13)--理解类的成员
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(1)--宏观把控
- javaSE_8系列博客——Java语言的特性(三)--类和对象(1)--概述
- Angular入坑指南(环境搭建)
- java数据类型补充——字符串和其他类型相加
- mariadb的网页管理
- git入门
- hdu2732 Leapin' Lizards(较难) [最大流]
- javaSE_8系列博客——Java语言的特性(四)--注解--(4)-- 类型注解和可插拔类型系统
- Java面试题技术类一
- linux常用的一些操作
- 【JavaSE系列-入门篇4】——进一步分析Hello World 应用程序
- GitHub入门教程:(1)简单的git使用,同步仓库
- S5PV210系列(裸机七)之 SDRAM
- 龙芯+Linux:国产CPU和操作系统现状是这样
- DOM对象转化成jQuery对象
- 未能加载文件或程序集“Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”