Java 中的注解符号@

Bishal Awasthi 2023年10月12日
  1. Java 中的@Override 注解
  2. Java 中的@SuppressWarnings 注解
  3. Java 中的@Deprecated 注解
Java 中的注解符号@

本文将介绍@符号,在 Java 中称为注解。我们将专注于内置 Java 注释,如 @Override@SuppressWarnings@Deprecated

Java 中的@Override 注解

在 Java 中,注解是一种表示附加在类、接口和方法上的额外信息的方式。Java 编译器和 JVM 使用提供的信息和注解。注释以@ 符号开头。@Override 注释确保子类方法覆盖父类方法。它是一个标记注释,因为它没有任何值或元素。当我们使用 @Override 注释时,编译器将生成错误并警告我们,如果在覆盖该方法时出现任何错误。它检查的可能错误是拼写错误以及参数和返回类型的错误。我们可以通过创建继承来演示 @Override 注释的使用。首先,我们不会使用注释,但稍后我们将使用它来演示@Override 的工作原理。

例如,创建一个类 Parent 并编写一个具有 void 返回类型的方法 message()。在方法内打印一些消息。同样,创建另一个类 Child,并扩展类 Parent。使用 void 类型创建相同的方法 message 并在其中写入一条消息。在方法之前,写上注释@Override。然后,在主类中,创建每个类的对象并调用 message() 方法。

在这里,子类继承了超类,每个类中的每个方法都可以毫无问题地调用。

示例代码:

class Annotation {
  public static void main(String[] args) {
    new Child().message();
    new Parent().message();
  }
}

class Parent {
  void message() {
    System.out.println("Invoked from the Parent class");
  }
}

class Child extends Parent {
  @Override
  void message() {
    System.out.println("Invoked from the Child class");
  }
}

输出:

Invoked from the Child class
Invoked from the Parent class

Child 类中的 message() 方法修改为 mesage()。然后,运行程序。它显示了以下输出。

输出:

Annotation.java:18: error: method does not override or implement a method from a supertype

在这里,我们更改了方法名称。有时,程序员在覆盖时可能会犯这种类型的错误。因此,@Override 注释可确保在覆盖方法时出现任何错误并提醒程序员。

Java 中的@SuppressWarnings 注解

@SuppressWarnings 注释告诉编译器抑制或忽略指定代码段的错误。我们可以将注解用于类型、字段、方法、参数、构造函数和局部变量。我们可以将注释括号之间的值 unchecked 指定为 @SuppressWarnings("unchecked") 以抑制错误。当我们在类之前使用注解时,它将抑制类内部的任何错误。当我们在类中的任何方法之前使用它时,它只会抑制来自该特定类的错误。

例如,导入 util 包并创建一个名为 Annotation 的类。在 main 方法之前写上@SuppressWarnings("unchecked")。在 main 方法中,创建 ArrayList() 的实例并将其分配给 fruits 变量。然后,使用 add() 方法添加值 applemango。最后,打印 fruits 变量。

在下面的示例中,我们从 util 包中导入了所有内容。它导入了我们之后使用的 ArrayList 类。上面的代码成功执行,虽然有错误。我们使用了非泛型集合 ArrayList。我们没有在 <> 符号内指定类型。因此,代码是错误的。但它会执行,因为我们使用@SuppressWarnings 注释抑制了错误。

示例代码:

import java.util.*;
class Annotation {
  @SuppressWarnings("unchecked")
  public static void main(String args[]) {
    ArrayList fruits = new ArrayList();
    fruits.add("apple");
    fruits.add("mango");
    System.out.println(fruits);
  }
}

输出:

[apple, mango]

如果我们对下面的代码不使用注解,编译器会显示如下错误。

输出:

Note: Annotation.java uses unchecked or unsafe operations.

Java 中的@Deprecated 注解

@Deprecated 注释用于将指定的代码段表示为不推荐使用的代码。当我们使用注释时,编译器会显示弃用警告。我们可以使用 @Deprecated 注释来注释类型、方法、字段和构造函数。

例如,创建一个类 Car 并创建一个带有参数 colorlengthwidth 的构造函数。在构造函数之前使用 @Deprecated 注释。让身体空着。创建另一个构造函数并在其中写入字符串参数 name。创建另一个类 Annotation,并在 main 方法中调用这两个构造函数。

在下面的示例中,我们在第一个构造函数之前使用了 @Deprecated 注释。它使编译器能够生成警告,指出构造函数已被弃用。通过这种方式,我们可以使用注释来指定代码中不推荐使用的内容。不鼓励删除已弃用的代码,因为它可用于在需要时回滚到以前的版本。鼓励在这种情况下使用新的替代方案。

示例代码:

class Annotation {
  public static void main(String args[]) {
    new Car("red", 550, 300);
    new Car("Lambo");
  }
}
class Car {
  @Deprecated
  Car(String color, int length, int width) {}
  Car(String name) {}
}

输出:

Note: Annotation.java uses or overrides a deprecated API.