如果我有这样的课程
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
的任何子类调用任何实现。
您真正想要的是每个子类型的接口都不同的,类型安全的版本。
这就是泛型的用途。您需要使接口通用。