第39条 注解优先于命名模式
-
Java 1.5之前,一般使用命名模式(naming pattern)表明有些程序元素需要通过某种工具或者框架进行特殊处理。比如方法的前缀名同一用"test"等等
-
@Repeatable
可以让一个注解在同一个元素上多次使用:@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Repeatable(AnnotationTwo.class) public @interface AnnotationOne { Class<? extends Exception> value(); } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AnnotationTwo { AnnotationOne[] value(); } public class Text { @AnnotationOne(RuntimeException.class) @AnnotationOne(NullPointerException.class) public void testTwoAnnotationMethod() { } @AnnotationOne(NullPointerException.class) public void testOneAnnotationMethod() { } }
使用
@Repeatable
注解的辅佐用就是,当重复使用一个注解之后,就会变成@Repeatable
注解里面配置的那个注解public static void main(String[] args) { Class<Text> clazz = Text.class; Method[] methods = clazz.getMethods(); for (Method method : methods) { if (!method.getName().startsWith("test")) { continue; } System.out.println(method.getName()); System.out.println(method.isAnnotationPresent(AnnotationOne.class)); } }
这个的执行结果是:
false true
,@AnnotationOne
在一个方法上重复使用之后变成了@AnnotationTwo
,不过method.getAnnotationsByType(AnnotationOne.class)
还是会返回两个的 -
有了注解就没有必要使用命名模式了
-
都应该使用Java平台所提供的与定义的注解类型
思考
- 注解主要是框架的时候会用到,业务代码里很少会碰到
-
@Repeatable
注解个人感觉副作用更多,使用的时候还需要每一个地方都判断出现了一次多次,让代码的复杂度提高了
网友评论