我尝试使用多态性来简化对存储在 servlet session 中的对象的处理,但我不断收到 ClassCastException。我正在使用 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,但某些东西似乎在转换中搞砸了(至少我认为这就是问题所在)。也许还有另一种方法?也许我的选角搞砸了?
最佳答案
Obj 属于 A 类
所以首先你将 Obj 从 A 转换为 A,这就是你得到 As 方法的原因
第二次将父类(super class) A 转换为子类 B。A 不知道 B
关于java - Servlet session 属性的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623894/