2013-01-07 133 views
0

覆蓋方法我們有一流的方法,該方法泛型參數

public class XYZ { 
    public <T extends Animal> someMethod(T animal){} 
} 

我要重寫與特定類型的子類這種方法泛型參數,但不知道怎麼辦。如何解決這個問題?

public class ABC extends XYZ{ 
    @Override 
    public Cat someMethod(Cat animal){} // error 
} 
+0

'public someMethod(T animal){}'幾乎等於'public someMethod(Animal animal){}' – newacct

+0

這很有道理。調用此方法的代碼,我正在分配到泛型類型。 – sidgate

回答

5

一個可能的解決辦法是讓你的XYZ類通用:

public class XYZ<T extends Animal> { 

    public void someMethod(T animal) { 
    } 
} 

,並宣佈你的ABC類具體到貓:

public class ABC extends XYZ<Cat> { 
} 

現在你可以寫:

ABC cats = new ABC(); 
cats.someMethod(new Cat()); //ok 
cats.someMethod(new Dog()); //does not compile