Effective Java - 注解优先于命名模式

2022-07-04  本文已影响0人  DZQANN

第39条 注解优先于命名模式

  1. Java 1.5之前,一般使用命名模式(naming pattern)表明有些程序元素需要通过某种工具或者框架进行特殊处理。比如方法的前缀名同一用"test"等等

  2. @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)还是会返回两个的

  3. 有了注解就没有必要使用命名模式了

  4. 都应该使用Java平台所提供的与定义的注解类型

思考

  1. 注解主要是框架的时候会用到,业务代码里很少会碰到
  2. @Repeatable注解个人感觉副作用更多,使用的时候还需要每一个地方都判断出现了一次多次,让代码的复杂度提高了
上一篇 下一篇

猜你喜欢

热点阅读