首页 > 解决方案 > 泛型类和子类型

问题描述

研究泛型类型......这是 Oracle 的一个例子:

interface PayloadList<E,P> extends List<E> {
  void setPayload(int index, P val);
}

PayloadList 的以下参数化是 List 的子类型:

PayloadList<String,String>
PayloadList<String,Integer>
PayloadList<String,Exception>

有人可以提供 PayloadList 接口实现的实时示例吗?

标签: javagenericssubtyping

解决方案


尽管这是在 Oracle 教程中,但我认为这是一个糟糕的例子。

您链接的页面说:

现在假设我们要定义自己的列表接口 PayloadList,它将泛型类型 P 的可选值与每个元素相关联

好吧,那不再是真的了List

我怀疑是否有人真正(认真地)实现过这个接口。

如果您想实现它,只需实现所有必需的方法。通过委托给现有的实现来实现大多数方法可能是最简单的List,这强烈表明组合而不是继承是对添加此“有效负载”功能的类进行建模的正确方法。

也就是说,“带有关联有效负载的列表”类不再被视为“列表”:它是一个包含列表和有效负载的东西。


推荐阅读