概述
Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。
1、自定义可重复注解:使用@Repeatable元注解,参数为可重复注解的容器
@Repeatable(MyAnnotations.class)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "java";
}
2、注解容器定义(可重复注解的容器的Target和Retention必须要比可重复注解的范围大)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE, TYPE_PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotations {
MyAnnotation[] value();
}
3、Java 8为ElementType枚举增加了TYPE_PARAMETER、TYPE_USE两个枚举值,这样就允许定义枚举时使用@Target(ElementType.TYPE_USE)修饰,这种注解被称为Type Annotation(类型注解),Type Annotation可用在任何用到类型的地方。从Java 8开始,Type Annotation可以在任何用到类型的地方使用。
public class TestAnnotationn {
@MyAnnotation
private @MyAnnotation String test;
@MyAnnotation("python")
@MyAnnotation("php")
public void show() {
}
public @MyAnnotation void test(@MyAnnotation("c") String str) {
Class<@MyAnnotation TestAnnotationn> clazz = TestAnnotationn.class;
}
@Test
public void test1() {
Class<TestAnnotationn> clazz = TestAnnotationn.class;
Method[] me = clazz.getDeclaredMethods();
for (Method method : me) {
if ("test".equalsIgnoreCase(method.getName())) {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
for (Annotation[] c : parameterAnnotations) {
for (Annotation annotation : c) {
System.out.print(((MyAnnotation) annotation).value());
}
}
MyAnnotation[] annotationsByType = method.getAnnotationsByType(MyAnnotation.class);
for (MyAnnotation myAnnotation : annotationsByType) {
System.out.println(myAnnotation.value());
}
}
}
}
}
最后
以上就是精明篮球为你收集整理的java 8 新特性之重复注解与类型注解的全部内容,希望文章能够帮你解决java 8 新特性之重复注解与类型注解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复