本文共 2063 字,大约阅读时间需要 6 分钟。
Java 8对注解处理提供了两点改进: 可重复的注解及可用于类型的注解。此外,反射也得到了加强,在Java8中能够得到方法参数的名称。这会简化标注在方法参数上的注解
可重复注解:
① 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
② MyAnnotation的Target和Retention等元注解与MyAnnotations相同。(相同的Target,Retention,Inherited)
package com.ylaihui.annotation2;public @interface MyAnn { String value() default "ylaihui";}
package com.ylaihui.annotation2;public @interface MyAnnotations { MyAnn[] value();}
//MyAnnotationsTest.javapackage com.ylaihui.annotation2;// 注解不能重复//Duplicate annotation. The declaration of //'com.ylaihui.annotation2.MyAnn' does not have a valid//@MyAnn("yyyy")//@MyAnn("lll")@MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})public class MyAnnotationsTest {}
package com.ylaihui.annotation3;import java.lang.annotation.Repeatable;@Repeatable(MyAnnotations.class)public @interface MyAnn { String value() default "ylaihui";}
package com.ylaihui.annotation3;import java.lang.annotation.Repeatable;public @interface MyAnnotations { MyAnn[] value();}
//MyAnnotationsTest.javapackage com.ylaihui.annotation3;// JDK1.8 新特性,注解可重复,但是需要配置,以下两种写法等价@MyAnn("yyyy")@MyAnn("lll")//@MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})public class MyAnnotationsTest {}
JDK1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个:TYPE_PARAMETER,TYPE_USE。
在Java 8之前, 注解只能是在声明的地方所使用, Java8开始, 注解可以应用在任何地方。
ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如: 泛型声明) 修饰的类型可以通过反射获取
ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。
package com.ylaihui.annotation4;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;@Target({TYPE_PARAMETER, TYPE_USE})public @interface MyAnn { String[] value() default "ylaihui";}
//AnnotationTest.javapackage com.ylaihui.annotation4;import java.util.ArrayList;class Annotations<@MyAnn T>{ public void info(@MyAnn String string) throws @MyAnn RuntimeException{ ArrayList<@MyAnn String> list = new ArrayList<>(); int d = (@MyAnn int)100.00; System.out.println(string); }}public class AnnotationTest { public static void main(String[] args) { }}
转载地址:http://uxuhf.baihongyu.com/