图解jdk1.8新特性(3)— 注解与类型推测优化
- 2019 年 10 月 29 日
- 笔记
图解jdk1.8新特性(3)— 注解与类型推测优化
获取同一类型多个注解
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是两个新添加的用于描述适当的注解上下文的元素类型