基本的泛型方法以及如何从非泛型类调用方法?
我需要一般方法和泛型的帮助。基本的泛型方法以及如何从非泛型类调用方法?
这里是我卡与规格:
在MyPets类以上,添加花费T作为参数的方法。这种称为myGenericMethod的方法将调用makeNoise。在这个方法中为你的两个宠物调用makeNoise方法。
问题是我如何从动物类(非泛型类)调用makeNoise方法。我必须使用反射吗?
public class MyPets<T>{
//creating the myGenericMethod with T as its parameter.
public void myGenericMethod(T t){
// How do I call the makeNoise() from Animal class here?
}
}
谢谢。
你只需要你的泛型类型声明,以反映它扩展了动物:
public class MyPets<T extends Animal> {
public void myGenericMethod(T t) {
t.makeNoise();
}
}
谢谢。
,你可以声明你的对象:
MyPets<Animal> obj;
你把它叫做:
obj.myGenericMethod(Animal aimal);
无论是从MyPets
删除该类型的参数,使myGenericMethod
只是采取Animal
,或者声明T
作为有界通配符必须是Animal
或某些子类型:
class MyPets<T extends Animal> {
public void myGenericMethod(T t) {
// you can call Animal methods on t here
}
}
你可以做的就是投t
到Animal
另一件事,即Animal animalT = (Animal) t;
。但是如果你这样做的话,那么宣称myGenericMethod
首先是T
毫无意义。
谢谢。你和GriffeyDog有相同的答案,我正在寻找。它以我想要的方式工作! – 2013-03-20 21:17:38
如果我正确理解你的问题,你需要修改,像这样你MyPets
类:
public class MyPets<T extends Animal> {
public void myGenericMethod(T t) {
t.makeNoise()
}
}
现在您有一个通用的MyPets
类,将T
限制为Animal
的实例,并且您知道Animal
的所有实例都有一个makeNoise
方法,您可以在myGenericMethod
中安全地拨打T#makeNoise()
。
这可以让你如下解决您的问题:
MyPets<Dog> myDog;
MyPets<Cat> myCat;
myDog = new MyPets<Dog>();
myDog.myGenericMethod(new Dog());
myCat = new MyPets<Cat>();
myCat.myGenericMethod(new Cat());
请注意,下面的内容也是技术上是正确的,尽管它,而失败摆在首位使用泛型的目的:
MyPets<Animal> myPet;
myPet = new MyPets<Animal>();
myPet.myGenericMethod(new Dog());
myPet.myGenericMethod(new Cat());
感谢您的详细解答。我已经理解了这个概念:)。 – 2013-03-20 21:28:44
'Animal'和'MyPets'之间有什么关系?你想成为什么? – 2013-03-20 20:59:26
我有延长动物的狗和猫类。基本上在主类中,我创建了1个狗和1个猫对象,然后使用从MyPets类创建的泛型类进行参数化。 – 2013-03-20 21:03:32