Java 8类型注释

Lambda表达式是迄今为止Java 8讨论最多和最受促进的功能。虽然我同意Lambda是一个很大的改进,但我认为其他一些Java 8功能由于Lambda的炒作而有所欠缺。 在这篇文章中,我想展示另一个来自Java 8的出色特性的示例:Type Annotations。

类型注释是可以在使用类型的任何位置放置的注释。 这包括new运算符,类型强制转换,Implements子句和throws子句。 类型注释可以改进对Java代码的分析,并可以确保更强大的类型检查。

在源代码中,这意味着我们获得了两个用于注释的新ElementType:

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Test {
}

枚举值TYPE_PARAMETER允许在类型变量(例如MyClass <T>)上应用注释。 目标TYPE_USE的注释可以应用于任何类型的使用。

请注意,发布Java 8时,以下示例的注释将无法立即使用。 Java 8仅提供了定义这些注释类型的功能。 然后由框架和工具开发人员实际使用它。 因此,这是将来可能为我们提供的注释框架的集合。 大多数示例取自“ 类型注释”规范和各种Java 8演示。

具有类型注释的简单类型定义如下所示:

@NotNull String str1 = ...
@Email String str2 = ...
@NotNull @NotBlank String str3 = ...

类型注释也可以应用于嵌套类型

Map.@NonNull Entry = ...

具有类型注释的构造函数:

new @Interned MyObject()
new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)

它们也与嵌套(非静态)类构造函数一起工作:

myObject.new @Readonly NestedClass()

类型转换:

myString = (@NonNull String) myObject;
query = (@Untainted String) str;

遗产:

class UnmodifiableList<T> implements @Readonly List<T> { ... }

我们可以将类型注释与泛型类型参数一起使用:

List<@Email String> emails = ...
List<@ReadOnly @Localized Message> messages = ...
Graph<@Directional Node> directedGraph = ...

当然,我们可以嵌套它们:

Map<@NonNull String, @NonEmpty List<@Readonly Document>> documents;

或将它们应用于交点类型:

public <E extends @ReadOnly Composable<E> & @Localized MessageSource> void foo(...) { ... }

包括参数范围和通配符范围:

class Folder<F extends @Existing File> { ... }
Collection<? super @Existing File> c = ...
List<@Immutable ? extends Comparable<T>> unchangeable = ...

具有类型注释的泛型方法调用如下所示:

myObject.<@NotBlank String>myMethod(...);

对于泛型构造函数,注释遵循显式类型参数:

new <String> @Interned MyObject()

抛出异常:

void monitorTemperature() throws @Critical TemperatureException { ... }
void authenticate() throws @Fatal @Logged AccessDeniedException { ... }

在instanceof语句中键入注释:

boolean isNonNull = myString instanceof @NonNull String;
boolean isNonBlankEmail = myString instanceof @NotBlank @Email String;

最后是Java 8方法和构造函数参考:

@Vernal Date::getDay
List<@English String>::size
Arrays::<@NonNegative Integer>sort

结论

类型注释是对Java类型系统的有趣补充。 它们可以应用于任何类型的使用,并可以进行更详细的代码分析。 如果要立即使用Type批注,则应查看Checker Framework 。

参考: mscharhag,Programming and Stuff博客上的JCG合作伙伴 Michael Scharhag的Java 8类型注释 。

翻译自: https://www.javacodegeeks.com/2014/02/java-8-type-annotations.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机应用基础知识点提纲,计算机应用基础复习提纲

一、单选题1&#xff0e;一个完整的计算机系统包括( D )A&#xff0e;计算机及其外部设备 B&#xff0e;主机、键盘、显示器C&#xff0e;系统软件和应用软件 D&#xff0e;硬件系统和软件系统2&#xff0e; 下列设备中&#xff0c;只属于输出设备的是( A )。A&#xff0e;显示…

python构建矩阵 x y_生成Python函数一半没问题,当前最正统的代码生成是什么样的?...

机器之心原创参与&#xff1a;思源大家都说深度神经网络能力很强&#xff0c;那么从函数注释生成函数代码&#xff0c;以及从函数代码总结函数注释这种最基础的代码任务到底能不能行&#xff1f;像 Python、Java 这样的通用高级语言&#xff0c;到底在代码生成上能达到什么水平…

福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)

目录 组队后的团队项目的整体计划安排项目logo及思维导图项目logo思维导图产品思维导图产品思维导图-引导产品思维导图-后端数据处理、存储产品思维导图-短信识别产品思维导图-智能分析产品思维导图-壁纸生成产品思维导图-注册界面产品思维导图-登录界面产品思维导图-使用1产品…

Web设计前沿:CSS3 在网页设计中的20个惊艳应用

作为 CSS 的下一个版本&#xff0c;CSS3 给 Web 开发带来了革命性的影响。例如&#xff0c;以前很多需要图片呈现的界面效果&#xff0c;现在使用 CSS3 结合 HTML 就可以实现&#xff0c;CSS3 甚至还可以实现需要 JavaScript 才能实现的复杂动画效果。下面向大家展示 CSS3 圆角…

leetcode 796. 旋转字符串(Rotate String)

目录 题目描述&#xff1a;示例 1:示例 2:解法&#xff1a;题目描述&#xff1a; 给定两个字符串, A 和 B。 A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A abcde&#xff0c;在移动一次之后结果就是bcdea 。如果在若干次旋转操作之后&#xff0c;A 能变成B&am…

Websockets与Spring 4

我将整个厨盆放入一个小型Web应用程序中&#xff0c;此应用程序是我在该帖子中开发的一部分-Spring Boot&#xff0c;Spring Integration&#xff0c;RabbitMQ&#xff0c;最后是该帖子的主题&#xff0c;Spring MVC与Spring 4中的Websocket支持。 实时地震清单应用 最终的应用…

计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...

原标题&#xff1a;MIT警告深度学习正逼近算力极限&#xff0c;突破瓶颈会让人类成为上帝&#xff1f;摩尔定律提出的时候&#xff0c;人们从来没有想到过芯片的算力会有到达极限的一天&#xff0c;至少从来没有想到芯片算力极限会这么快到来。MIT发出警告&#xff1a;算力将探…

推荐40个简单的 jQuery 导航插件和教程【下篇】

在这篇文章中&#xff0c;我为大家收集了40款非常棒的 jQuery 导航插件和教程。导航作为网站重要的组成部分&#xff0c;能够帮助用户找到他们想要的内容&#xff0c;因此导航设计的好坏决定了用户能够在你的网站停留更长的时间&#xff0c;浏览更多的内容。在下面的集合中&…

福大软工 · 第七次作业 - 需求分析报告

【 组长博客链接】 031602428 苏路明 【计划安排】 阶段主要任务时间任务内容1项目选题09.22 - 10.10确定选题内容&#xff0c;收集用户需求&#xff0c;明确定位&#xff0c;竞品分析&#xff0c;选题报告2需求分析10.11 - 11.4梳理需求&#xff0c;输出思维导图&#xff0c;原…

网站页面左右_广州网站优化的技巧是什么?

说到网站优化&#xff0c;大家都不陌生&#xff0c;但首先&#xff0c;我们知道为什么要优化网站吗?我们网站优化是为了改善网站在百度&#xff0c;搜狗等搜索引擎搜索结果排名中的网站页面&#xff0c;以增强搜索引擎的流量。下面拓王朝广州网站优化公司小编针对网站的优化技…

python: 爬取[博海拾贝]图片脚本

练手代码&#xff0c;聊作备忘&#xff1a; # encoding: utf-8 # from __future__ import unicode_literalsimport urllib import urllib2 import re import os import time from threading import Threadclass BhsbSpider(object):_url rhttps://bh.sb/post/category/main/;_…

Java八岁生日快乐!

这是另外一段漫长的旅程&#xff0c;但是昨天&#xff0c;恰好是Java 7发布两年零七个月零十八天之后&#xff0c;我们现在有了可用于生产的构建 Java 8可供下载 &#xff01; 这个新的主要版本包含一些新功能和增强功能&#xff0c;这些功能和增强功能可以提高现有应用程序的…

ajax eval html,Ajax eval的应用示例

Ajax eval的使用示例(1)eval基本语法&#xff1a;eval函数接收一个参数s&#xff0c;如果s不是字符串&#xff0c;则直接返回s。否则执行s语句。如果s语句执行结果是一个值&#xff0c;则返回此值&#xff0c;否则返回undefined。(2)eval使用场景&#xff1a;1)Ajax:解析JSON数…

精心挑选的23款美轮美奂的 jQuery 图片特效插件

jQuery是一个非常优秀的 JavaScript 框架&#xff0c;使用简单灵活&#xff0c;同时还有许多成熟的插件可供选择。其中&#xff0c;jQuery 最令人印象深刻的应用之一就是对图片的处理&#xff0c;它可以让帮助你在你的项目中加入各种精美的图片展示效果。下面向大家分享精心挑选…

arduino定时器函数如何使用_excel如何使用函数公式来查找图片

先看效果&#xff1a;是不是有点意思啊。好&#xff0c;咱们看看如何实现这样的效果。步骤一&#xff1a;准备好图片资料&#xff0c;话说巧媳妇难做无米之炊&#xff0c;没有资料&#xff0c;如何查询&#xff1f;如下图所示&#xff1a;A列是产品名称&#xff0c;B列是对应的…

XML到Avro的转换

我们都知道XML是正确的吗&#xff1f; 以防万一&#xff0c;这里的一切都没问题。 <root> <node>5</node> </root>现在&#xff0c;计算机真正需要的是数字5及其周围的环境。 在XML中&#xff0c;您&#xff08;人和计算机&#xff09;可以看到它如何…

oracle数据库连接查询

简单查询、复杂查询 简单查询: 单表 复杂查询: 1. 子查询(嵌套查询) 2. 连接查询 ************************连接查询**************************** 一.什么是连接查询 把多张表连接在一起,一块查 二.什么时候使用 数据来自于多张表的时候,要使用连接查询 三.连接查询的分类 1. …

精美的手机界面设计素材和线框图设计工具推荐

在制作界面原型的时候&#xff0c;如果有现成的界面基础元素可以使用的话&#xff0c;设计师就可以非常快速的完成原型的制作&#xff0c;能够节省大量的时间和精力。在这篇文章&#xff0c;我向大家分享45套非常有用的 UI 和 Wireframe 套件素材包&#xff0c;帮助设计们用于 …

c语言求数列的和_例15:C语言求Fibonacci数列的前30个数

例15&#xff1a;求Fibonacci数列的前30个数。这个数列有以下特点&#xff1a;第1,2两个数为1,1,。从第三个数开始&#xff0c;该数是其前两个数之和。&#xff08;斐波那契不死神兔&#xff09;解题思路&#xff1a;从前两个月的兔子数可以推出第3个月的兔子数。设第1个月的兔…

哈工大未来计算机院士,中国双一流大学拥有院士校友数排名,这是真实力!哈工大依然很强...

原标题&#xff1a;中国双一流大学拥有院士校友数排名&#xff0c;这是真实力&#xff01;哈工大依然很强校友是一个神奇的资源&#xff0c;就是曾经在同一个学校、大学、研究院(所)进行学习、工作和进修的人&#xff0c;就称为校友&#xff0c;以学校为标准&#xff0c;并不以…