获取同一类型多个注解

​ jdk1.8的java.lang.Class类新增了方法getAnnotationsByType方法,该方法可以获取某一个类型的注解列表,具体代码示例如下:

public class AnnotationTest {

	@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Filters {
Filter[] value();
} @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Filters.class)
public @interface Filter {
String value();
} @Filter("filter1")
@Filter("filter2")
public interface Filterable { } @Filters({@Filter("filter1"), @Filter("filter2")})
public interface Filterable2 { } public static void main(String[] args) {
for (Filter filter : Filterable.class.getAnnotationsByType(Filter.class)) {
System.out.println(filter.value());
}
for (Filters filter : Filterable.class.getAnnotationsByType(Filters.class)) {
System.out.println(filter.value().length);
}
for (Filter filter : Filterable2.class.getAnnotationsByType(Filter.class)) {
System.out.println(filter.value());
}
for (Filters filter : Filterable2.class.getAnnotationsByType(Filters.class)){
System.out.println(filter.value().length);
}
}
} 输出如下:
filter1
filter2
2
filter1
filter2
2

更好的类型推断

​ 上面可以看出getOrDefault第二个参数的类型可以通过第一个参数来推断,如果在jdk1.8之前,需要写成如下形式:

value.getOrDefault("asas", Value.<String>defaultValue());

注解的进一步扩展

  • jdk1.8扩展了注解的上下文,现在注解几乎可以加到任何地方:局部变量、泛型类、⽗类与接⼝的实现,就连⽅法的异常也能添加注解
  • ElementType.TYPE_USE和ElementType.TYPE_PARAMETER是两个新添加的⽤于描述适当的注解上下⽂的元素类型

图说jdk1.8新特性(3)--- 注解与类型推测优化的更多相关文章

  1. 图说jdk1.8新特性(1)--- 函数式接口

    函数式接口 总结起来就以下几点: 如果一个接口要想成为函数接口(函数接口可以直接用lambda方式简化),则必须有且仅有一个抽象的方法(非default和static) 可以通过注解@Function ...

  2. 图说jdk1.8新特性(5)--- 编译器新特性

    /** * Returns the name of the parameter. If the parameter's name is * {@linkplain #isNamePresent() p ...

  3. 图说jdk1.8新特性(4)--- stream

    总述 jdk1.8引入了Stream相关的API,通过该API.可以实现流式编程,使你写代码的时候行云流水 Stream使得集合的转换变得更加简单,原来可能需要写多个for循环或者多个if判断的,直接 ...

  4. JDK1.5新特性之注解

    时间:2017-1-2 20:14 --注解的概述    注释是给人看的,而注解是给程序(框架)看的.    在Servlet3.0中可以使用注解来替代配置文件,开发者就不用再写配置文件了,而是写注解 ...

  5. 图说jdk1.8新特性(2)--- Lambda

    简要说明 jdk常用函数式接口 Predicate @FunctionalInterface public interface Predicate<T> { boolean test(T ...

  6. Java8新特性 重复注解与类型注解

    import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.anno ...

  7. JDK1.7新特性(2):异常和可变长参数处理

    异常 jdk1.7对try--catch--finally的异常处理模式进行了增强,下面我们依次来看增强的方面. 1. 为了防止异常覆盖,给Throwable类增加了addSuppressed方法,可 ...

  8. JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用

    jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default   Lambda表达式     L ...

  9. JDK1.8新特性之(三)--函数式接口

    在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...

随机推荐

  1. await 只能在 async 中使用吗? 并不是

    for await (let a of [1,2,3]) { console.log(a) } ​

  2. (原)关于使用zoompad滤镜生成一个转场效果

    之前在 http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=1294&extra=page%3D1 上分享过一个转场效果,今 ...

  3. PAT-2019年冬季考试-甲级 7-4 Cartesian Tree (30分)(最小堆的中序遍历求层序遍历,递归建树bfs层序)

    7-4 Cartesian Tree (30分)   A Cartesian tree is a binary tree constructed from a sequence of distinct ...

  4. LeetCode_485. Max Consecutive Ones

    485. Max Consecutive Ones Easy Given a binary array, find the maximum number of consecutive 1s in th ...

  5. JAVA中List对象去除重复值的方法

    JAVA中List对象去除重复值,大致分为两种情况,一种是List<String>.List<Integer>这类,直接根据List中的值进行去重,另一种是List<Us ...

  6. web基础---->script标签的特殊使用

    今天要讲的就是怎样使用<script>去请求一个servlet,加载一些js资源以及额外的逻辑处理: 目录: JS的引入的几种方式 在script的标签中引入Servlet 动态引入JS的 ...

  7. python数据分析3之标签化

  8. 关于【vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据】的优化

    之前写的[vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据]这篇博客.功能虽然实现了相对应的功能.但是用起来很不爽.所以进行了优化. 备注:最近可能没时 ...

  9. Ubuntu下重启mysql

    启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /etc/init.d ...

  10. Java学习之旅(二):生病的狗2(java例化)

    废话不多说,直接上肝货,可运行. 代码简陋,逻辑关系可能还不是很严谨,欢迎交流. public class Owner { //属性部分 //狗主人肯定有一条狗,这条狗可以被别的主人检查,所以设置为p ...