Java8新特性之重复注解(repeating annotations)浅析_java

一、什么是重复注解

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

二、一个简单的例子

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),相信注解会比以前使用得更加频繁了。

时间: 2024-07-28 19:17:44

Java8新特性之重复注解(repeating annotations)浅析_java的相关文章

JAVA8新特性

总结提高,与君共勉 上次在一个同学的面经看到,被问到了JAVA8新特性,这个总结不好,转载一篇神文,一起来了解了解 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API "Java is still not dead-and people are starting to figure that out." 本教程

java8 新特性之 Lambda 讲解教程

什么是Lambda Lambda 是个新的特性添加到java的jdk中,说明了java对其它语言的支持,吸收其它语言先进的方法.Lambda 表达在java中提供了类型的引用,方法的引用,和默认方法. 对于Lambda的解释在wiki百科看到了就不做翻译保留原味(看看大家的理解,有不同的看法欢迎探讨)Lambda (programming), a function (or a subroutine) defined, and possibly called, without being boun

java8新特性整理

java9快来了,必须得梳理一下java8了. 官方文档:http://docs.oracle.com/javase/specs/jls/se8/html/index.html 一.接口的默认方法和静态方法 接口里也可以写方法体了,实现该接口的类不再强制实现该方法,只需要在方法签名增加default签名并实现方法体,如: 接口: public interface Compute { default Integer add(Integer x,Integer y) { return x+y; }

What's New in JDK 8 java8新特性汇总

    Oracle甲骨文公司终于在2014年3月发布了Java 8正式版,它是java的一个里程牌版本,带来了诸多新特性.      针对这些新特性汇总如下: 一.针对java编程语言(Java Programming Language)     1.lambda表达式:一种新的语言特性,能够把函数作为方法的参数或将代码作为数据.lambda表达式使你在表示函数接口(具有单个方法的接口)的实例更加紧凑. public class Calculator { interface IntegerMa

Java8新特性之Lambda表达式浅析_java

说到java 8,首先会想到lambda(闭包)以及虚拟扩展方法(default method),这个特性早已经被各大技术网站炒得沸沸扬扬了,也是我们java 8系列开篇要讲的第一特性(JEP126 http://openjdk.java.net/jeps/126),jdk8的一些库已经应用了lambda表达式重新设计了,理解他对学习java 8新特性有着重要的意义. 一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是

Java8新特性之字符串去重介绍_java

8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新.支持在运行时通过API来修改MinHeapFreeRatio和MaxHeapFreeRatio参数.新的GC调优指南文档.不过在众多新特性中,最令人期待的还属字符串去重(String Deduplication ).如何减少内存占用一直是一个永恒的话题,而在Java应用中,经常会看到String对象会占用应用30%的内存,它是Java中最常用的对象之一.新的字符串去重特性可以帮助减少应用中St

详谈Java8新特性泛型的类型推导_java

1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法的创建中.理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = new ArrayList<Ap

java8新特性 (λ、stream 与 默认接口方法)

1.lambda λ表达式本质上是一个匿名方法,用来方便地实现函数接口.也就是说,λ表达式主要用于替换以前广泛使用的内部匿名类.  让我们来看下面这个例子:     public int add(int x, int y) {         return x + y;     } 转成λ表达式后是这个样子:     (int x, int y) -> x + y; 参数类型也可以省略,Java编译器会根据上下文推断出来:     (x, y) -> x + y; //返回两数之和 或者  

Java8新特性之默认方法(default)浅析_java

一.什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. 为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的java 8之前的集合框架没有foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现.然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现.所以引进的默认方法