如何从父类和子类的相同方法返回泛型类型

时间:2014-10-01 04:11:21

标签: java generics polymorphism

这是我的情景 我有3节课。

class Animal {
   public getWeight(){ ..... }
   public getHeight(){ ..... }
}

class Dog extends Animal {
   public getDogType() { ...}
}

class Cat extends Animal {
   public getCatType(){....}
}

还有一种不同的方法可以返回一个将Object作为参数

的Animal类型
public Animal translate(CustomObject o){
     ... so many calculations here
}

这里translate方法返回Animal Object,但我需要使用相同的方法返回Dog和Cat类型而不进行类型转换。我知道我必须在这里使用Generics但是如何编辑translate方法以支持Generics,这样我就可以将Class类型传递给它的参数,如果使用Cat参数调用它返回Cat对象,如果使用Animal参数和Dog调用它则返回Animal对象如果使用Dog参数调用对象。

例如: - Cat newCat = translate(object, Cat.class); //should return cat object and not animal obj      而不是

Cat newCat =(Cat)translate(object,Cat.class)

感谢。

2 个答案:

答案 0 :(得分:2)

您需要自我引用界限:

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()抽象,允许子类处理自己的实现。

答案 1 :(得分:1)

尝试public <T extends Animal> translate(CustomObject o, Class<T> clazz)