图说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是两个新添加的⽤于描述适当的注解上下⽂的元素类型

原文地址:https://www.cnblogs.com/Kidezyq/p/11753522.html