Oracle JDK 8 常用注解盘点

Oracle JDK 8引入了许多常用注解,下面列举一些主要的注解、它们的功能以及优缺点,并提供一些简单的示例。

  1. @Override:

    • 功能: 表示一个方法是覆盖父类的方法。
    • 优点: 编译器能够检测到是否正确地覆盖了父类的方法。
    • 缺点: 如果父类的方法签名发生变化,可能导致编译错误。
    class Parent {
        void doSomething() {}
    }
    
    class Child extends Parent {
        @Override
        void doSomething() {
            // 子类实现
        }
    }
    
  2. @Deprecated:

    • 功能: 表示某个元素(类、方法等)已过时,不再推荐使用。
    • 优点: 提醒开发者不要再使用过时的元素。
    • 缺点: 不会阻止开发者使用过时的元素。
    class DeprecatedExample {
        @Deprecated
        void oldMethod() {
            // 过时的方法实现
        }
    }
    
  3. @SuppressWarnings:

    • 功能: 抑制编译器警告。
    • 优点: 用于消除某些情况下不必要或者不适用的警告。
    • 缺点: 可能掩盖了潜在的问题。
    class SuppressWarningExample {
        @SuppressWarnings("unchecked")
        void uncheckedOperations() {
            // 执行一些类型不安全的操作
        }
    }
    
  4. @FunctionalInterface:

    • 功能: 表示接口是一个函数式接口,即只包含一个抽象方法的接口。
    • 优点: 提醒开发者该接口应该用于Lambda表达式。
    • 缺点: 如果添加了多个抽象方法,编译器将报错。
    @FunctionalInterface
    interface MyFunctionalInterface {
        void myMethod();
    }
    
  5. @SafeVarargs:

    • 功能: 用于抑制关于使用可变参数的警告。
    • 优点: 提高代码的可读性,消除不必要的警告。
    • 缺点: 只能用于静态方法或者 final 实例方法。
    class SafeVarargsExample {
        @SafeVarargs
        final void processItems(List<String>... items) {
            // 处理可变参数
        }
    }
    
  6. @Repeatable:

    • 功能: 用于支持可重复注解。
    • 优点: 允许一个元素可以多次使用相同的注解。
    • 缺点: 增加了代码的复杂性。
    @Repeatable(MyAnnotations.class)
    @interface MyAnnotation {
        String value();
    }
    
    @interface MyAnnotations {
        MyAnnotation[] value();
    }
    
    @MyAnnotation("Annotation 1")
    @MyAnnotation("Annotation 2")
    class RepeatableExample {
        // 类体
    }
    
  7. @Retention:

    • 功能: 用于指定注解的保留策略,即注解在什么级别可用,有 SOURCE、CLASS 和 RUNTIME 三个级别。
    • 优点: 允许开发者根据需要指定注解的生命周期。
    • 缺点: 使用不当可能导致注解在运行时不可用。
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyRuntimeAnnotation {
        String value();
    }
    
  8. @Target:

    • 功能: 用于指定注解可以应用的程序元素的种类,包括 TYPE、FIELD、METHOD 等。
    • 优点: 增强了注解的限制和使用范围。
    • 缺点: 使用不当可能导致注解无法应用到期望的元素上。
    @Target(ElementType.METHOD)
    @interface MyMethodAnnotation {
        String value();
    }
    
  9. @Resource:

    • 功能: 用于标注字段或方法,指定由名称来注入资源。
    • 优点: 简化了依赖注入的过程。
    • 缺点: 只能注入命名的资源,对于按类型注入的场景不适用。
    public class ResourceExample {
        @Resource(name = "myDataSource")
        private DataSource dataSource;
    
        @Resource
        public void setLogger(Logger logger) {
            // 设置Logger
        }
    }
    

你可能感兴趣的:(java,oracle,java)