在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
热门推荐
10 小学毕业父母简短祝福语
11 幼儿生日祝福语模板简短
12 新娘妈妈的祝福语简短
13 邻居聚会祝福语大全简短
14 十条祝福语简短
15 给同学祝福语的简短
16 过年祝福语简短祝妈妈
17 祝女儿简短祝福语大全
18 恩师诗词祝福语简短大全