如何将ArrayList转换为ArrayList的SubType

时间:2015-10-24 09:17:16

标签: java arraylist casting

班级结构

class Packet {}
class PacketList extends ArrayList<Packet> {} 

现在我正在尝试将ArrayList的对象转换为PacketList的对象

List<Packet>  p = new ArrayList<Packet> ();
PacketList pList = p;

但它不起作用。请帮帮我

错误消息:

不兼容的类型:列表无法转换为PacketList

1 个答案:

答案 0 :(得分:1)

PacketList扩展了ArrayList<Packet>,这意味着新引入或覆盖可能需要的方法,并依赖于仅在新PacketList版本中引入的其他工件。如果它引用仅在PacketList中可用的实例变量,该怎么办?虽然您打算通过这些方法访问它们,但ArrayList不会拥有这些实例变量...

不,您不能将超类的实例分配给与扩展类匹配的类型的变量。

您反过来工作,使用超类型作为泛型类型来分配扩展(子类)实例。