如何从父类和子类的相同方法返回泛型类型
问题描述:
这是我的场景 我有3个类。如何从父类和子类的相同方法返回泛型类型
class Animal {
public getWeight(){ ..... }
public getHeight(){ ..... }
}
class Dog extends Animal {
public getDogType() { ...}
}
class Cat extends Animal {
public getCatType(){....}
}
而且有它返回一个动物类型以一个对象作为参数
public Animal translate(CustomObject o){
... so many calculations here
}
这里翻译方法返回Animal对象不同的方法,但我需要用同样的方法返回犬和Cat类型也没有类型转换。我知道我必须在这里使用泛型,但是如何编辑translate方法来支持泛型,以便我可以将Class类型传递给它的参数,并且如果使用Cat参数调用Cat对象并且使用Animal参数调用Animal对象时会返回Cat对象。如果使用Dog参数调用该对象。例如
: - Cat newCat = translate(object, Cat.class); //should return cat object and not animal obj
代替
猫newCat =(CAT)翻译(对象,Cat.class)
感谢。
答
尝试public <T extends Animal> translate(CustomObject o, Class<T> clazz)
。
+0
感谢您的回答 – abat 2014-10-06 05:04:01
答
你需要绑定的自参考:
class Animal<T extends Animal<T>> {
public getWeight(){ ..... }
public getHeight(){ ..... }
public T translate(CustomObject o){
//... so many calculations here
}
}
class Dog extends Animal<Dog> {
//
}
class Cat extends Animal<Cat> {
//
}
你可以考虑做translate()
抽象,让子类来处理自己的实现。
为什么不使用类型转换? – jordanpg 2014-10-01 06:58:07