Fields in a "Serializable" class should either be transient or serializable

发布时间 2023-06-06 11:21:24作者: 进击的小蔡鸟

原因

该错误通常表示在实现Serializable接口的Java类中,存在非transient而且不可序列化(即没有实现Serializable接口)的字段。这可能会导致在序列化和反序列化对象时出现问题。

解决方案

解决此问题的方法是,将所有非transient的字段都标记为transient,或者确保它们都可以被序列化。如果某个字段不能被序列化,则需要将其设置为transient,并在序列化和反序列化期间采取其他措施来处理该字段

方案一 所有非transient的字段标记为transient

可以尝试将data字段标记为transient,如下所示:

private transient Collection<T> data;

方案二 确保它们都可以被序列化

确保泛型参数必须实现序列化,将其限定为T extends Serializable

public class PageVO<T extends Serializable> implements Serializable {

    private static final long serialVersionUID = 1L;

    private Collection<T> data;

}

ps: transient 会导致该字段不被序列化,在提供duboo rpc接口时该字段值为null,如果要避免这种问题,推荐使用方案二