具有 servlet 会话属性的多态性

Polymorphism with servlet session attribute

我正在尝试使用多态性来简化对存储在 servlet 会话中的对象的处理,但我不断收到 ClassCastExceptions。我正在使用 Struts 框架(1.3.10 和 Struts 2)

我有以下内容:

class A{
 // fields omitted
  A{ // initialize}
  load{ //- no implementation }

  // getters + setters
}

class B extends A{
  // fields omitted
  B { // initialize }
  @Override
  load{ // specific implementation}
}

class C extends A{
  // fields omitted
  C { // initialize }
  @Override
  load{ // specific implementation}
}

现在,我实例化如下,在session中进行操作和存储。

A obj = new B();
//-- manipulate and load fields here
request.getSession().setAttribute("obj", obj);

稍后,我想取回这个对象。

A laterObject = (A) request.getSession().getAttribute("obj");
//fails to give me B's load() implementation. Same issue for C's load() implementation.

我也试过了

A laterObject = (B) request.getSession().getAttribute("obj");
// ClassCastException

我的问题:有没有办法检索 (B) 或 (C) 以及 运行 为每个对象专门实现的每个加载方法?我想要做的是使用多态性使我的代码适用于 B 或 C,但在转换中似乎搞砸了(至少我认为这就是问题所在)。也许还有另一种方法?也许我的选角搞砸了?

对象属于 class A

因此,首先将 A 的 Obj 转换为 A,这就是为什么您获得 As 方法的原因

你第二次将 A 的超级class 转换为子class B。A 不知道 B