java - 为什么我的类不可序列化?

标签 java class serialization object serializable

我有以下类(class):

import java.awt.Color;
import java.util.Vector;

public class MyClass {

    private ImageSignature imageSignature;

    private class ImageSignature implements Serializable {
        private static final long serialVersionUID = -6552319171850636836L;
        private Vector<Color> colors = new Vector<Color>();

        public void addColor(Color color) {
            colors.add(color);
        }

        public Vector<Color> getColors() {
            return colors;
        }
    }

    // Will be called after imageSignature was set, obviously
    public String getImageSignature() {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(imageSignature);
        oos.close();
        return String(Base64Coder.encode(baos.toByteArray()));
    }
}

当我尝试调用 getImageSignature() 时,我得到一个 NotSerializableException - 为什么会这样?所有成员都是可序列化的,那么为什么会出现该错误?

最佳答案

ImageSignature 的每个实例都有一个对 MyClass 封闭实例的隐式引用,并且 MyClass 不可序列化。

要么使 MyClass 可序列化,要么声明 ImageSignature 静态:

private static class ImageSignature implements Serializable {

关于java - 为什么我的类不可序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411292/

相关文章:

javascript - 当函数的行为类似于类但不使用 class 关键字或 "new"关键字(在 Javascript 中)时,它被称为什么?

python - Django 主键序列化器 "This field may not be null"同时allow_null=True

java - 使用 @Singletone 注释创建 EJB ejb3.1

java - 为什么我的变量在使用不同的类时返回 null 和/或 0?

c# - Lambda 参数在稍后范围内访问字段时与类字段冲突

java - Apache Storm 中的自定义序列化

json - Django 核心 : <django. utils.functional.__proxy__ 对象在 ....> 不是 JSON 可序列化的

java - 如何向资源 ID 添加计数

java - 使用 Arquillian/ShrinkWrap 过滤 Maven 资源

java - JNI native 调用 *prototypes* 在他们自己的类/ namespace ?