具有 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
我正在尝试使用多态性来简化对存储在 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