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

  • 相关阅读:
    Ubuntu下systemd服务的配置
    编译压缩代码 MFCompress-src-1.01 :对‘***’未定义的引用
    德尔福 基础
    德尔福 XE5 安卓权限设置
    德尔福 XE5 安卓调试
    复制任意文件或文件夹到剪贴板
    无法完成安装:'Cannot access storage file '/
    Centos7.4安装kvm虚拟机(使用virt-manager管理)
    MSYS2 使用
    线程
  • 原文地址:https://www.cnblogs.com/Kidezyq/p/11753522.html
Copyright © 2020-2023  润新知