理解泛型和多态性

时间:2012-10-24 09:30:00

标签: java generics polymorphism

  

可能重复:
  Is `List<Dog>` a subclass of `List<Animal>`? Why aren’t Java’s generics implicitly polymorphic?

public abstract class AbstractServerSession<E extends AbstractPacket> {
[...]
packet = (E) PacketFactory.getPacket(packetClazz);

我收到恕我直言的错误:

Type mismatch: cannot convert from AbstractPacket to E

如果我明确声明EAbstractPacket的孩子,他将如何转换?

我可以添加演员

packet = (E) PacketFactory.getPacket(packetClazz);

但当然我收到了这个警告:

Type safety: Unchecked cast from AbstractPacket to E

那么<E extends AbstractPacket>是什么?

编辑:根据要求

public static final AbstractPacket getPacket(Class<? extends AbstractPacket> clazz)

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

  

但当然我得到这个警告:   类型安全:从AbstractPacket到E

取消选中

我认为警告是有道理的,因为E类型无法在编译时确定,但它不会影响您的运行。