175. Java 注释 - 预定义的注释类型

175. Java 注释 - 预定义的注释类型

Java SE API 提供了一些预定义的注释类型 ,这些注释有助于增强代码的可读性、可维护性,并提供编译器、JVM 或其他工具的额外信息。常见的注释类型包括 @Deprecated@Override@SuppressWarnings,它们用于特定的场景,如标记弃用的代码、覆盖超类方法以及禁用编译器警告等。

📝 常用的 Java 注释类型

1. @Deprecated 注释

@Deprecated 注释标记某个类、方法或字段为弃用 ,这意味着该元素不再建议使用,未来的版本中可能会删除它。当使用带有 @Deprecated 注释的元素时,编译器会发出警告。

java 复制代码
// Javadoc 注释中的使用说明
/**
 * @deprecated
 * This method is no longer recommended for use due to performance issues.
 */
@Deprecated
static void deprecatedMethod() {
    // Method logic here
}

Java SE 9 新增的功能: @Deprecated 注释现在支持一个 forRemoval 属性,指示该元素是否计划在未来的版本中删除。如果 forRemoval = true,则表示该元素将被删除;默认值是 false

java 复制代码
@Deprecated(forRemoval = true)
void oldMethod() {
    // This method is marked for future removal
}
2. @Override 注释

@Override 注释告知编译器该方法重写了超类中的一个方法。尽管这不是强制性的,但它有助于防止意外错误------如果方法签名不匹配,编译器将给出错误提示,确保方法确实覆盖了超类的方法。

java 复制代码
@Override
int overriddenMethod() {
    // This method overrides a method from the superclass
    return 0;
}
3. @SuppressWarnings 注释

@SuppressWarnings 注释指示编译器禁用特定类型的警告 ,从而避免显示默认会出现的警告。例如,如果使用了已弃用的方法,通常会收到弃用警告,但我们可以通过 @SuppressWarnings("deprecation") 来禁止这些警告显示。

java 复制代码
@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
    deprecatedMethod();  // This method call is deprecated, but no warning will be shown
}

多个警告类别可以一起使用:

java 复制代码
@SuppressWarnings({"unchecked", "deprecation"})
void processLegacyCode() {
    // Suppress both unchecked and deprecation warnings
}
4. @SafeVarargs 注释

@SafeVarargs 注释用于指示方法或构造函数安全地使用可变参数(varargs ,并且没有执行任何不安全的操作。该注释可以避免与 varargs 使用相关的未选中警告。

java 复制代码
@SafeVarargs
public static <T> void safeMethod(T... elements) {
    // Safe use of varargs parameter
}
5. @FunctionalInterface 注释

@FunctionalInterface 注释表明一个接口是功能接口 ,即该接口仅包含一个抽象方法。Java SE 8 引入了此注释类型,用于明确标识这些接口,以便可以在 lambda 表达式中使用。

java 复制代码
@FunctionalInterface
public interface MyFunctionalInterface {
    void myMethod();  // Single abstract method (SAM)
}

📝 元注释:注释的注解

元注释(meta-annotations)是应用于其他注释的注释。它们用于控制注释的行为,定义注释的适用范围和作用等。常见的元注释包括 @Retention@Target@Documented 等。

1. @Retention 注释

@Retention 注释用于指定注释的保留策略,即注释在哪个阶段可用。它有三个选项:

  • RetentionPolicy.SOURCE:注释仅在源代码中可见,编译器将忽略该注释。
  • RetentionPolicy.CLASS:注释在编译后的 .class 文件中保留,但 JVM 会忽略它。
  • RetentionPolicy.RUNTIME:注释在运行时仍然可用,JVM 会保留它,可以通过反射访问。
java 复制代码
@Retention(RetentionPolicy.RUNTIME)
@interface MyRuntimeAnnotation {
    String value();
}
2. @Documented 注释

@Documented 注释指示该注释应包含在 Javadoc 中。当应用于某个注释类型时,Javadoc 工具将生成包含该注释的文档。

java 复制代码
@Documented
@interface MyAnnotation {
    String description() default "No description";
}
3. @Target 注释

@Target 注释用于指定该注释可应用的**Java 元素类型**。例如,@Target 可以限制注释仅应用于方法、字段、类或其他 Java 元素。

java 复制代码
@Target(ElementType.METHOD)  // This annotation can only be applied to methods
@interface MyMethodAnnotation {
    String description();
}
4. @Inherited 注释

@Inherited 注释表示注释可以从超类继承。这意味着如果在父类中定义了注释,子类也会继承该注释。该注释仅适用于类级注释。

java 复制代码
@Inherited
@interface MyInheritedAnnotation {
    String value();
}
5. @Repeatable 注释

@Repeatable 注释允许同一个注释类型可以多次应用于同一声明或类型使用。Java SE 8 引入了这一特性,允许在类、方法或字段上多次使用相同的注释类型。

java 复制代码
@Repeatable(MyAnnotations.class)
@interface MyAnnotation {
    String value();
}

@interface MyAnnotations {
    MyAnnotation[] value();
}

📌 总结

  • @Deprecated 用于标记不再推荐使用的代码元素,并在使用时生成警告。
  • @Override 用于标识方法是覆盖超类的方法,并有助于防止错误。
  • @SuppressWarnings 用于抑制特定类型的编译警告。
  • @SafeVarargs 用于指示方法安全地使用可变参数(varargs)。
  • @FunctionalInterface 用于声明功能接口,表明该接口是可以用作 Lambda 表达式的目标接口。

元注释 (如 @Retention@Target@Documented)是控制注释行为的工具,它们帮助定义注释的作用范围和生命周期。

相关推荐
自由的疯1 小时前
Java RuoYi整合Magic-Api详解
java·后端·架构
自由的疯1 小时前
Java 实现TXT文件上传并解析的Spring Boot应用
后端·架构
爱学大树锯1 小时前
【Ruoyi 解密 - 09. 前端探秘2】------ 接口路径及联调实战指南
前端
老华带你飞1 小时前
校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·小程序·毕设·校园二手书交易管理系统
萌程序.1 小时前
创建Vue项目
前端·javascript·vue.js
VT.馒头1 小时前
【力扣】2704. 相等还是不相等
前端·javascript·算法·leetcode·udp
linweidong2 小时前
Vue前端国际化完全教程(企业内部实践教程)
前端·javascript·vue.js·多语言·vue-i18n·动态翻译·vue面经
开始学java2 小时前
抽象类和抽象方法
后端
lukeLiouu2 小时前
augment不能白嫖了?试试claude code + GLM4.5,十分钟搞定起飞🚀
前端
华仔啊2 小时前
别再乱 new ArrayList!8 大 Java 容器选型案例,一篇看懂
java·后端