文档章节

Java 8新特性探究(五)重复注解(repeating annotations)

OSC闲人
 OSC闲人
发布于 2013/12/03 08:28
字数 418
阅读 7475
收藏 26

知识回顾

前面介绍了:
lambda表达式和默认方法 (JEP 126)
批量数据操作(JEP 107)
类型注解(JEP 104)
注:JEP=JDK Enhancement-Proposal (JDK 增强建议 ),每个JEP即一个新特性。

在java 8里面,注解一共有2个改进,一个是类型注解,在上篇已经介绍了,本篇将介绍另外一个注解的改进:重复注解(JEP 120)。

什么是重复注解

允许在同一申明类型(类,属性,或方法)的多次使用同一个注解

一个简单的例子

java 8之前也有重复使用注解的解决方案,但可读性不是很好,比如下面的代码:

public @interface Authority {
     String role();
}

public @interface Authorities {
    Authority[] value();
}

public class RepeatAnnotationUseOldVersion {
    
    @Authorities({@Authority(role="Admin"),@Authority(role="Manager")})
    public void doSomeThing(){
    }
}

由另一个注解来存储重复注解,在使用时候,用存储注解Authorities来扩展重复注解,我们再来看看java 8里面的做法:

@Repeatable(Authorities.class)
public @interface Authority {
     String role();
}

public @interface Authorities {
    Authority[] value();
}

public class RepeatAnnotationUseNewVersion {
    @Authority(role="Admin")
    @Authority(role="Manager")
    public void doSomeThing(){ }
}

不同的地方是,创建重复注解Authority时,加上@Repeatable,指向存储注解Authorities,在使用时候,直接可以重复使用Authority注解。从上面例子看出,java 8里面做法更适合常规的思维,可读性强一点

总结

JEP120没有太多内容,是一个小特性,仅仅是为了提高代码可读性。这次java 8对注解做了2个方面的改进(JEP 104,JEP120),相信注解会比以前使用得更加频繁了。

转载时候请注明出处。 http://my.oschina.net/benhaile 



© 著作权归作者所有

OSC闲人

OSC闲人

粉丝 3707
博文 22
码字总数 26172
作品 1
深圳
技术主管
私信 提问
加载中

评论(1)

Sky__
Sky__
注:JEP=JDK Enhancement-Proposal (JDK 增强建议 ),每个JEP即一个新特性。

这个表示赞!
Java8 Lambda【简】

Java8 Lambda Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。 ...

anlve
2018/03/08
0
0
Oracle 为 JDK 8 寻求社区参与

随着Java 7功能的日益完备,Oracle正在将注意力转向JDK 8,Java平台组的首席架构师Mark Reinhold正在寻求Java社区的参与。 我们已经知道JDK 8中会有一些大家伙,同时也会为其他大大小小的特性...

小编辑
2011/04/12
892
0
Java 8新特性探究(四)类型注解 复杂还是便捷

本文将介绍java 8的第二个特性:类型注解。 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注...

OSC闲人
2013/11/28
0
5
Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。 为什么说是长期版本,看下面的官方发布的支持路线图表。 可以看出 Java 8 扩展支持到 2025 年,...

Java技术栈
2018/09/27
0
0
从java1到java9每个版本都有什么新特性?

每次出新版本,大家大概都会这么问,“Java X会有什么特性呢?” 。在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在哪个发行版...

Java红茶
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

https://zhuanlan.zhihu.com/p/61408911

在Logistimo,我们的所有应用程序都是Docker化的,并在Kubernetes内以docker容器运行。我们注意到在使用Java的容器上发生了大量重启,并且非常随机。Docker检查发现该pod被OOMKiller代码杀死...

xiaomin0322
28分钟前
2
0
北斗三号IGSO-2卫星发射成功!

6月25日,中国航天科技集团官方公众号宣布,北斗三号IGSO-2卫星发射成功! 航天科技集团表示,6月25日2点09分,我国在西昌卫星发射中心用长征三号乙运载火箭成功将北斗三号第2颗倾斜地球同步...

linux-tao
32分钟前
1
0
oracle通过dblink查询sqlserver报错

报错如下: SQL> select * from t@mstest; select * from t@test * ERROR at line 1: ORA-28545: error diagnosed by Net8 when connecting to an agent Unable to retrieve text of NETWORK......

突突突酱
34分钟前
2
0
docker-elasticsearch学习

如果不适用docker,面临的问题有: 部署非常慢 成本非常高 资源浪费 难于迁移和扩展 可能会被限定硬件厂商 虚拟化技术的优点: 虚拟化技术出现以后,一个物理机可以部署多个App,每个App独立...

Vincent-Duan
44分钟前
1
0
MySQL权限管理坑

权限系统的工作原理 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证、不合法的用户拒绝连接。 (2)对通过认证的合法用户赋予相应的权限,用户...

bengozhong
46分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多