Java8重复注解与类型注解

xiaoxiao2021-02-28  134

Java8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。 一、重复注解 package com.expgiga.Java8; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; /** * 自定义注解 */ @Repeatable(MyAnnotations.class) @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() default "expgiga"; } package com.expgiga.Java8; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; /** * 注解容器 */ @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotations { MyAnnotation[] value(); } package com.expgiga.Java8; import java.lang.reflect.Method; /** * Java8重复注解与类型注解 */ public class TestAnnotation { public static void main(String[] args) throws NoSuchMethodException { Class<TestAnnotation> clazz = TestAnnotation.class; Method m1 = clazz.getMethod("show"); MyAnnotation[] mas = m1.getAnnotationsByType(MyAnnotation.class); for (MyAnnotation myAnnotation : mas) { System.out.println(myAnnotation.value()); } } @MyAnnotation("Hello") @MyAnnotation("World") public void show() { } } 二、类型注解 package com.expgiga.Java8; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.LOCAL_VARIABLE; /** * 自定义注解 */ @Repeatable(MyAnnotations.class) @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, TYPE_PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() default "expgiga"; } package com.expgiga.Java8; import java.lang.reflect.Method; /** * Java8重复注解与类型注解 */ public class TestAnnotation { //checker framework private /*@NotNull*/ Object obj = null; public static void main(String[] args) throws NoSuchMethodException { Class<TestAnnotation> clazz = TestAnnotation.class; Method m1 = clazz.getMethod("show"); MyAnnotation[] mas = m1.getAnnotationsByType(MyAnnotation.class); for (MyAnnotation myAnnotation : mas) { System.out.println(myAnnotation.value()); } } @MyAnnotation("Hello") @MyAnnotation("World") public void show(@MyAnnotation("abc") String str) { } }
转载请注明原文地址: https://www.6miu.com/read-58229.html

最新回复(0)