Interface RepeatableAnnotationCollector
- All Known Implementing Classes:
RepeatableAnnotationCollector.AbstractCollector,RepeatableAnnotationCollector.Condition,RepeatableAnnotationCollector.Full,RepeatableAnnotationCollector.None,RepeatableAnnotationCollector.Standard
public interface RepeatableAnnotationCollector
可重复注解收集器,用于从一个注解获得被它包含的可重复注解
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic classRepeatableAnnotationCollector的基本实现static class自定义判断条件的实现,当解析注解属性时,将根据给定的判断条件, 确定该属性中是否含有可重复注解,收集器将返回所有匹配的属性中的可重复注解。static class全量实现,当注解中存在有属性为注解数组,且该数组对应的注解类型被Repeatable注解时, 认为该属性包含可重复注解。 收集器将返回所有符合上述条件的属性中的可重复注解。static class空实现static class标准实现,当注解中有且仅有一个名为value的属性时, 若该属性类型为注解数组,且该数组对应的注解类型被Repeatable注解, 则收集器将返回该属性中包括的可重复注解。 -
Method Summary
Modifier and TypeMethodDescriptionstatic void清空单例缓存condition(BiPredicate<Annotation, Method> predicate) 当解析注解属性时,将根据给定的判断条件,确定该属性中是否含有可重复注解。 收集器将返回所有匹配的属性中的可重复注解。full()当注解中存在有属性为注解数组,且该数组对应的注解类型被Repeatable注解时, 认为该属性包含可重复注解。 收集器将返回所有符合上述条件的属性中的可重复注解。 eg:getAllRepeatableAnnotations(Annotation annotation) 若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的注解对象。 若包含的注解对象也是可重复注解的容器注解,则继续解析直到获得所有非容器注解为止。 eg: 若存在嵌套关系a -> b -> c,则解析注解a, 将获得全部a、b、c注解。 如果注解不包含可重复注解,则返回a本身。getFinalRepeatableAnnotations(Annotation annotation) 若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的注解对象。 若包含的注解对象也是可重复注解的容器注解,则继续解析直到获得所有非容器注解为止。 eg: 若存在嵌套关系a -> b -> c, 则解析注解a,则将得到全部c注解。 如果注解不包含可重复注解,则返回a本身。<T extends Annotation>
List<T> getRepeatableAnnotations(Annotation annotation, Class<T> annotationType) 若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的指定类型注解对象。 eg: 若存在嵌套关系a -> b -> c,则: 解析注解a:可获得a、b、c; 解析注解b:可获得b、c; 解析注解c:只可获得c;none()空实现standard()当注解中有且仅有一个名为value的属性时, 若该属性类型为注解数组,且该数组对应的注解类型被Repeatable注解, 则收集器将返回该属性中包括的可重复注解。 eg:
-
Method Details
-
none
空实现- Returns:
RepeatableAnnotationCollector实例
-
standard
当注解中有且仅有一个名为value的属性时, 若该属性类型为注解数组,且该数组对应的注解类型被Repeatable注解, 则收集器将返回该属性中包括的可重复注解。 eg:
解析任意// 容器注解 @interface Annotation { Item[] value() default {}; } // 可重复注解 @Repeatable(Annotation.class) @interface Item {}Annotation注解对象,则可以获得value属性中的Item注解对象- Returns:
RepeatableAnnotationCollector实例- See Also:
-
condition
当解析注解属性时,将根据给定的判断条件,确定该属性中是否含有可重复注解。 收集器将返回所有匹配的属性中的可重复注解。- Parameters:
predicate- 是否为容纳可重复注解的属性的判断条件- Returns:
RepeatableAnnotationCollector实例
-
full
当注解中存在有属性为注解数组,且该数组对应的注解类型被Repeatable注解时, 认为该属性包含可重复注解。 收集器将返回所有符合上述条件的属性中的可重复注解。 eg:
解析任意@interface Annotation { Item1[] items1() default {}; Item2[] items2() default {}; }Annotation注解对象, 则可以获得items1属性中的Item1注解对象, 以及items2属性中的Item2注解对象,- Returns:
RepeatableAnnotationCollector实例
-
clearSingletonCaches
static void clearSingletonCaches()清空单例缓存 -
getFinalRepeatableAnnotations
若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的注解对象。 若包含的注解对象也是可重复注解的容器注解,则继续解析直到获得所有非容器注解为止。 eg: 若存在嵌套关系a -> b -> c, 则解析注解a,则将得到全部c注解。 如果注解不包含可重复注解,则返回a本身。- Parameters:
annotation- 容器注解- Returns:
- 容器注解中的可重复注解,若
annotation不为容器注解,则数组中仅有其本身一个对象
-
getAllRepeatableAnnotations
若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的注解对象。 若包含的注解对象也是可重复注解的容器注解,则继续解析直到获得所有非容器注解为止。 eg: 若存在嵌套关系a -> b -> c,则解析注解a, 将获得全部a、b、c注解。 如果注解不包含可重复注解,则返回a本身。- Parameters:
annotation- 容器注解- Returns:
- 容器注解中的可重复注解,若
annotation不为容器注解,则数组中仅有其本身一个对象
-
getRepeatableAnnotations
<T extends Annotation> List<T> getRepeatableAnnotations(Annotation annotation, Class<T> annotationType) 若一个注解是可重复注解的容器注解,则尝试通过其属性获得获得包含的指定类型注解对象。 eg: 若存在嵌套关系a -> b -> c,则:- 解析注解a:可获得a、b、c;
- 解析注解b:可获得b、c;
- 解析注解c:只可获得c;
- Type Parameters:
T- 注解类型- Parameters:
annotation- 容器注解annotationType- 注解类型- Returns:
- 容器注解中的可重复注解
-