JAVA:是否可以序列化一个不可序列化的私有字段的第三方类?

时间:2016-12-09 08:10:06

标签: java serialization serializable

我试图创建一个中间可序列化的类来复制字段但我不能因为这些字段是私有的,有什么建议吗?

public class RowSerializable extends Row implements Serializable{

    public Object[] fields;

    public RowSerializable(int arity, Row a) {
        super(arity);
        this.fields = a.fields;
    }
}

问题是行类型字段是私有的private final Object[] fields;

2 个答案:

答案 0 :(得分:0)

您可以使用反射来获取超类中所有字段的值;请参阅here获取相关指导。

然后,您可以将该信息存储在派生类中;然后你应该能够序列化你的新类的对象。

当然是丑陋的事情:在反序列化时,您还必须使用反射将RowSerializable的所有字段值推回到Row父字段中。

所有这一切在技术上都可行,但当然,这不是一个非常强大的解决方案。示例:当使用该Row类的新版本时,对于之前使用旧版Row.class进行序列化的Row实例,可能根本不起作用。

因此,我个人的两分钱:要非常小心这样做。感觉就像一个肮脏的黑客,绝对不是免费的。

更新:我认为为了让事情顺利进行,你甚至不能在这里使用继承 - 因为序列化遍历整个继承树。所以你可能不得不放弃#34;扩展Row"从你的代码开始。

答案 1 :(得分:0)

私有字段将被序列化,如果它们被声明为transient,则不会被序列化,例如连接。序列化与访问级别无关。