在Java中使用通配符时应遵循哪些准则?

除了泛型(T)中的类型化参数外,您还可以使用“?”来表示未知类型。您可以将通配符用作-

  • 参数类型。

  • 领域。

  • 本地字段。

对通配符的唯一限制是,您不能在调用它时将其作为泛型方法的类型参数。

Java提供3种类型的通配符,即上限,下限,无界。Java中有两种通配符类型-

  • 上限通配符-通配符中的 上限类似于泛型中的有界类型。使用此功能,可以将特定类的所有子类型用作类型化参数。

    例如,如果要接受Collection对象作为方法的参数,而类型化的参数作为数字类的子类,则只需要声明一个以数字类为上限的通配符即可。

  • 下界通配符 -同样,如果我们使用下界通配符,则可以限制“?”的类型 到特定类型或超类型。

  • 例如,如果要接受Collection对象作为方法的参数,而类型化的参数作为Integer类的超类,则只需要声明一个带有Integer类的下限通配符。

应遵循的指导方针

在Java中使用通配符时,您需要牢记以下几点。

  • 如果(您的方法)有一个获取数据(从中读取数据)的变量,则需要使用上限通配符(扩展名)对其进行定义。

  • 如果(您的方法)有一个用于保存数据的变量(在其中读取数据),则需要使用下界通配符(超级)进行定义。

  • 如果(您的方法)需要使用获取数据的变量来调用Object类的方法,则在这种情况下,您需要使用无界通配符。

  • 如果您(您的方法)需要同时使用两个变量来读取和存储数据,则无需使用通配符。

示例

import java.util.ArrayList;

import java.util.List;

   class Person {

   String name;

   Person(String name) {

      this.name = name;

   }

   public String toString() {

      return name;

   }

}

class Employee extends Person {

   Employee(String name) {

      super(name);

   }

}

class NonTeachingStaff extends Employee {

   NonTeachingStaff(String name) {

      super(name);

   }

}

class Student extends Person {

   Student(String name) {

      super(name);

   }

}

public class WildCardGuidelines {

   //上限通配符

   //在类别

   public static void deleteEmp(List<? extends Employee> empList, Employee emp) {

      empList.remove(emp);

      System.out.println("emp Removed");

   }

   //下界通配符

   //出类别

   public static void addEmp(List<? super NonTeachingStaff> empList) {

      empList.add(new NonTeachingStaff("nts"));

      System.out.println("emp Added");

   }

   //无限通配符

   //Using Object method toString()   public static void printAll(List<?> list) {

      for (Object item : list)

         System.out.println(item + " ");

   }

   public static void main(String[] args) {

      List<Person> personList= new ArrayList<Person>();

      List<NonTeachingStaff> ntsList= new ArrayList<NonTeachingStaff>();

      addEmp(personList);

      addEmp(ntsList);

      addEmp(ntsList);

      //打印所有数据

      printAll(personList);

      printAll(ntsList);

      Employee emp = ntsList.get(0);

      deleteEmp(ntsList, emp);

      printAll(ntsList);

   }

}

输出结果

emp Added

emp Added

emp Added

nts

nts

nts

emp Removed

nts

以上是 在Java中使用通配符时应遵循哪些准则? 的全部内容, 来源链接: utcz.com/z/356970.html

回到顶部