您无法检查泛型类型的变量是否是特定类的实例,然后在不先强制转换它的情况下引用其字段。
在你的
isYoung
方法只需检查
petObj
是动物宠物的一个例子。对于编译器来说,在类型擦除之后,petObj仍然是一个对象实例;因此,您需要按如下方式强制转换变量以使用其成员:
public class MainFile {
public static void main(String[] args) {
AnimelPet kitten = new AnimelPet(12, "European shorthair");
Worker Anna = new Worker(21, 5, "Anna Java");
infoPet(Anna);
}
private static <T> void isYoung(T petObj) {
if(petObj instanceof AnimelPet) {
AnimelPet pet = (AnimelPet) petObj;
if(pet.ageInMonths < 4) {
System.out.println("The cat is pretty young!");
}
else if (pet.ageInMonths > 4) {
System.out.println("The cat is old!");
}
}
else if(petObj instanceof Worker) {
Worker work = (Worker) petObj;
if (work.ageInYears < 18) {
System.out.println("The worker is underage!");
}
else if (work.ageInYears > 18) {
System.out.println("The worker is overage!");
}
}
}
}
旁注:我想你想把你的班级叫做AnimalPet而不是AnimalPet。