如果我有这样的课程
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。
答案 0 :(得分:3)
从根本上讲是不安全的;如果接口被声明为接受SuperType
,则您必须能够使用SuperType
的任何子类调用任何实现。
您真正想要的是每个子类型都有不同的类型安全的接口版本。
这就是泛型的用途。您需要使该接口具有通用性。