如果我有这样的课程

class SuperType {}

class SubTypeOne extends SuperType {}

class SubTypeTwo extends SuperType {}


我想做一个这样的界面

interface TypeHandler {
  public void handle(SuperType arg);
}


但是允许这些是有效的实现

class SubTypeOneHandler implements TypeHandler {
  public void handle(SubTypeOne arg) { }
}


如您所见,使用接口中定义的参数类型的子类。

我试图用重写接口

interface TypeHandler {
  public void handle(? extends SuperType arg);
}


但这看起来不是有效的java。

最佳答案

从根本上讲这是不安全的;如果接口被声明为接受SuperType,则您必须能够使用SuperType的任何子类调用任何实现。

您真正想要的是每个子类型的接口都不同的,类型安全的版本。
这就是泛型的用途。您需要使接口通用。

09-13 10:35