使用泛型参数覆盖方法

sid*_*ate 0 java generics overriding

我们在类中有一个带泛型参数的方法

public class XYZ {
     public <T extends Animal> someMethod(T animal){}
}
Run Code Online (Sandbox Code Playgroud)

我想在具有特定类型的子类中覆盖此方法,但不知道如何.如何解决这个问题?

public class ABC extends XYZ{
  @Override
  public Cat someMethod(Cat animal){}  // error
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 5

一种可能的解决方案是使您的XYZ类具有通用性:

public class XYZ<T extends Animal> {

    public void someMethod(T animal) {
    }
}
Run Code Online (Sandbox Code Playgroud)

并声明你的ABC课程特定于猫:

public class ABC extends XYZ<Cat> {
}
Run Code Online (Sandbox Code Playgroud)

现在你可以写:

ABC cats = new ABC();
cats.someMethod(new Cat()); //ok
cats.someMethod(new Dog()); //does not compile
Run Code Online (Sandbox Code Playgroud)