2014-10-01 204 views
1

这是我的场景 我有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)

感谢。

+0

为什么不使用类型转换? – jordanpg 2014-10-01 06:58:07

回答

1

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

+0

感谢您的回答 – abat 2014-10-06 05:04:01

1

你需要绑定的自参考:

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

+0

感谢您的回答 – abat 2014-10-06 05:04:57

+0

np。仅供参考,其他答案允许您从'Dog'对象返回一个'Cat'。 – Bohemian 2014-10-06 05:11:05

相关问题