2014-10-01 16 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

相關問題