java序列化的顺序_Java序列化顺序和自引用

这是一个简化的类:

class Foo implements Serializable {

private static final long serialVersionUID = 1L;

private Integer id;

private Set children;

public Foo( Integer id ) {

if( id == null ) {

throw new IllegalArgumentException( );

}

this.id = id;

this.children = new HashSet( 16 );

}

@Override public int hashCode( ) {

return id.hashCode( );

}

...

}

如您所见,它包含一组自身,并使用其id属性生成哈希.但是当对象具有自引用循环时,我遇到了一个问题:

当对象被反序列化时,处理首先跟随子对象到最深的对象,然后向后构建.这通常很好,但如果一个对象包含其子对象中的一个较高对象,则它会中断:当它试图将此对象添加到其HashSet时,它会调用hashCode,但是尚未为该对象加载id,所以它崩溃时出现NullPointerException.

(我花了很长时间来追踪它!)

所以我的问题是:我可以控制序列化的顺序吗?我需要在孩子之前对id进行序列化(和反序列化).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值