java - 为什么从抽象 Serialized 继承时会收到 InvalidClassException 'no valid constructor'?

标签 java serialization serializable

这是代码(简化):

public abstract class PageBase implements Serializable {
     private static final long serialVersionUID = -31905358958878336L;
}

public abstract class ListPage extends PageBase {

    public Controller getController() {
         // Controller is a class
         // that implements Serializable and does have an def. constr.
         return new Controller() {
              @Override
              public void someMethod() {
                  // DoSomething
              }
         };
    }
}

public class ProjectList extends ListPage {
}

通过反序列化它会抛出:

java.io.InvalidClassException: my.pkg.page.ListPage$1; no valid constructor

反序列化发生在 IBM JSF 代码中的某处。

有什么想法吗?谢谢!

最佳答案

my.pkg.page.ListPage$1 将是一个匿名内部类。即使在最好的情况下,序列化嵌套类也不是一个好主意(到完整 JVM 名称的映射很差以及“外部 this”引用的处理)。

该异常看起来好像正在尝试查找派生最多的非Serialized基类的无参数构造函数,而派生最少的Serialized基类必须可以访问该构造函数> 类。

关于java - 为什么从抽象 Serialized 继承时会收到 InvalidClassException 'no valid constructor'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575436/

相关文章:

python - Django Rest Framework 返回字典而不是 OrderedDicts

java - 在不提供 writeObject/readObject 方法的情况下实现 Serializable

Java 可序列化保存

java - 在自顶向下游戏中使用三角函数时遇到问题

java - 如何从 Java 中的 TextField 中删除逗号

java - 在解析基本 JSON 对象时,如何防止 GSON 返回 null?

Java transient 字段的序列化

java - 当成员是 java.util.List 类型时序列化 Sonarqube 问题

java - 根据一列中的多个条件获取记录

java - jrockit升级是否需要nodemanager重新注册Weblogic域