我希望有人能指导我朝着正确的方向前进。我必须创建2个狗对象,然后将它们添加到MyPets对象作为myFirstPet和mySecondPet。我有多个类,如Animal,Dog,Greyhound,它实现了Comparable接口和MyPets(泛型类)。
MyPets类:
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类有main:
public class TestClass {
public static void main(String[] args) {
MyPets<Dog> dog = new MyPets();
MyPets<Dog> doggie = new MyPets();
}
}
我不确定我需要做什么才能将2个狗对象添加到MyPets对象作为myFirstPet和mySecondPet。我甚至不知道我是否正确地创建了Dog对象。
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
小心......你实际上没有创建任何Dog
个对象;而是创建了两个MyPets
对象。但由于每个MyPets
本身实际上只是其他Animal
个对象的列表,因此将MyPets
的实例视为{{}是没有意义的1}}。
您的代码应该看起来像:
Dog
答案 2 :(得分:0)
看起来你在泛型语法中迷失了方向。您需要区分(概念)MyPets<Dog>
对象与Dog
对象之间的区别。
您的任务是创建两个Dog
个对象,然后将它们添加到单个MyPets<Dog>
对象中。您上面编写的代码创建了两个MyPets
个对象,但没有Dog
个对象。此外,它不使用您编写的任何函数(setMyFirstPet
等) - 经常签署这样的分配,您的逻辑缺少一步。
你的main
方法应该是什么样的(摘要,以避免为你工作)是这样的:
MyPets<Dog>
对象。Dog
个对象。Dog
个对象添加到MyPets
对象(使用setMy[First/Second]Pet
方法)。答案 3 :(得分:0)
您编写的类存储了同一对象的对(请不要在此讨论继承)。假设您有两个类Cat
和Dog
,并且您希望存储对这些类型的对象的引用使用你的课,你这样做:
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对象传递给MyPets,其中T = Dog,那将是编译时错误,而不是运行时。