java - Servlet session 属性的多态性

标签 java servlets polymorphism session-variables

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

相关文章:

java - 从现有的 ParameterizedType 创建另一个类的参数化类型

java - Java AbstracStringBuilder 类中的字段 'int count' 是在/通过哪种方法设置的?

java - 创建GSON对象错误

java - httpsession验证是否存在

具有接口(interface)成员变量和成员方法的 Java 类的行为不同。请解释

java - 更改 printf() 方法中的格式说明符会导致 IllegalFormatFlagsException

java - Spring MVC 3.0 访问 session 变量

java - 是否可以查看servlet的源代码?

c# - 编译器选择了错误的重载

c++ - 多态性和数据成员c++