代码之家  ›  专栏  ›  技术社区  ›  AISAN

找不到令人兴奋的符号?[重复]

  •  0
  • AISAN  · 技术社区  · 4 年前

    创造了一个 AnimalPet

    class AnimelPet {
        int ageInMonths;
        String breed;
        
        AnimelPet(int ageInMonths, String breed) {
            this.ageInMonths = ageInMonths;
            this.breed = breed;
        }
    }
    

    创造了一个 Worker

    class Worker {
        int ageInYears;
        String name;
        int yearOfWork;
        
        Worker(int ageInYears, int yearOfWork, String name) {
            this.ageInYears = ageInYears;
            this.name = name;
            this.yearOfWork = yearOfWork;
        }
    }
    

    这个 Main

    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) {
                if(petObj.ageInMonths < 4) {
                    System.out.println("The cat is pretty young!");
                } 
                else if (petObj.ageInMonths > 4) {
                    System.out.println("The cat is old!");
                }
            } 
            else if(petObj instanceof Worker) {
                if (petObj.ageInYears < 18) {
                    System.out.println("The worker is underage!");
                }
                else if (petObj.ageInYears > 18) {
                    System.out.println("The worker is overage!");
                }
            }
        }
    }
    

    得到 error: cannot find symbol 对于以下变量:

    • ageInYears
    • ageInMonths
    1 回复  |  直到 4 年前
        1
  •  0
  •   dani-vta    4 年前

    您无法检查泛型类型的变量是否是特定类的实例,然后在不先强制转换它的情况下引用其字段。

    在你的 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。

    推荐文章