在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 送给学长毕业祝福语简短