1

我希望有人可以引导我朝着正确的方向前进。我必须创建 2 个 Dog 对象,然后将它们作为 myFirstPet 和 mySecondPet 添加到 MyPets 对象中。我有多个类,例如实现 Comparable 接口和 MyPets(泛型类)的 Animal、Dog、Greyhound。

我的宠物类:

public class MyPets<T> {

    private T myFirstPet;
    private T mySecondPet;

    public void setMyFirstPet(T myFirstPet) {
        this.myFirstPet = myFirstPet;
    }

    public void setMySecondPet(T mySecondPet) {
        this.mySecondPet = mySecondPet;
    }

    public T getMyFirstPet(){
        return myFirstPet;
    }

    public T getMySecondPet(){
        return mySecondPet;
    }

    @Override
    public String toString() {
        return "My first pet " + myFirstPet + ", my second pet "
                + mySecondPet;
    }
}

TestClass 类主要有:

public class TestClass {

    public static void main(String[] args) {

        MyPets<Dog> dog = new MyPets();
        MyPets<Dog> doggie = new MyPets();

    }
}

我不确定我需要在这里做什么才能将 2 个狗对象作为 myFirstPet 和 mySecondPet 添加到 MyPets 对象。我什至不知道我是否正确创建了 Dog 对象。

4

4 回答 4

0

你的测试必须是这样的:

    public class TestClass {

        public static void main(String[] args) {

            MyPets<Dog> pets = new MyPets();
            Dog first = new Dog();
            Dog second = new Dog();
            pets.setMyFirstPet(first);
            pets.setMySecondPet(second);

        }
    }
于 2013-10-28T17:13:31.703 回答
0

小心……你实际上并没有创建任何Dog对象;相反,您创建了两个MyPets对象。但是由于 eachMyPets本身实际上只是其他对象的列表Animal因此将 的实例MyPets视为Dog.

您的代码实际上应该类似于:

Dog dog = new Dog(/* use your constructor for Dog here... */);
Dog doggie = new Dog(/* use your constructor for Dog here... */);
MyPets<Dog> dogList = new MyPets<Dog>();
//Since this appears to be homework I'll let you figure out what to do here...    
于 2013-10-28T17:14:28.200 回答
0

看起来您迷失在泛型语法中。您需要区分(概念上MyPets<Dog>)对象与对象之间的区别Dog

您的任务是创建两个Dog对象,然后将它们添加到单个MyPets<Dog>对象中。您在上面编写的代码创建了两个MyPets对象,但没有Dog对象。此外,它不使用您编写的任何功能(setMyFirstPet等等) - 通常是这样的登录分配,您的逻辑缺少一个步骤。

你的main方法应该是什么样子(抽象地,避免为你做你的工作)是这样的:

  • 创建一个MyPets<Dog>对象。
  • 创建两个Dog对象。
  • 将两个Dog对象都添加到MyPets对象中(使用setMy[First/Second]Pet方法)。
于 2013-10-28T17:19:24.833 回答
0

您编写的类存储相同对象的对(此处不讨论继承)。假设您有两个类CatDog并且您想使用您的类存储对这些类型的对象的引用,您可以这样做:

MyPets<Dog> myDogs = new MyPets<Dog>();
myDogs.setMyFirstPet(new Dog("Roger"));/*Assuming this is your dog constructor*/
myDogs.setMySecondPet(new Dog("Rocket"));
System.out.println(myDogs);
MyPets<Cat> myCats = new MyPets<Cat>();
myCats.setMyFirstPet(new Cat(/*A cat name*/));
myCats.setMySecondPet(new Cat(/*Another cat name*/));

泛型有很多微妙之处。您应该记住的一件事是,在运行时,没有 T。MyPets 类中的 T 被转换为 Object 类型的引用。T 仅在编译时使用,以确保您传递给 MyPets 的对象确实是 T 类型。在上面的代码中,如果您将 Cat 对象传递给 T = Dog 的 MyPets,这将是编译时错误,而不是运行。

于 2013-10-28T17:33:58.077 回答