鉴于以下情况,只能编写一个适用于SpecificModel
的模型处理程序,不可能有一个只处理模型的模型处理程序。但是当我们删除T extends Model
表达式时,创建非法的东西会很容易。
public interface Model {}
public class SpecificModel implements Model {}
public interface ModelHandler<T extends Model>
{
void handleModel(T model);
}
是否可以编写像T extends Model || Model
这样的构造?因此,如果处理程序不知道T
的子类型,那么extend Model
必须是Model
或必须是Model
本身?
谢谢!
答案 0 :(得分:7)
引自Jos Java的有效Java,关于<? extends E>
符号:
关键字extends的使用有点误导: 回忆[来自第26项],定义了子类型,以便每种类型都是自身的子类型, 即使它没有扩展自己。
因此,撰写<T extends Model>
等同于您的期望:<T extends Model || Model>
。
答案 1 :(得分:2)
T extends Model
匹配Model
。因此,您可以在此处创建ModelHandler<Model>
。
诚然,这个术语有点误导。
(或者你的目标是撰写ModelHandler<any subtype of Model but not Model itself>
?)
答案 2 :(得分:0)
如果T extends Model
,则T
为Model
。我真的不确定你想在这里写什么...另外 - 在泛型中,extends
也代表implements
有意义。