2013-01-07 100 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