关于Java junit中序列化深拷贝的坑

本文介绍了在Java 1.8和JUnit 4.0环境下,使用序列化进行HashSet深拷贝时遇到的问题。当PhysicalObject类及其子类Planet实现了Serializable接口,但在Track类中进行深拷贝时会抛出异常。问题根源在于junit测试中,被序列化的对象包含了测试类本身。为解决此问题,文章提出只需让测试类也实现Serializable接口,尽管该接口无须实现任何方法,但可以避免异常的发生。
摘要由CSDN通过智能技术生成

java版本1.8
junit版本4.0

问题描述

打算使用序列化的方法深拷贝HashSet和里面的元素,形如HashSet,其中PhysicalObjet extends Serializable,单独创建这样的一个集合并深拷贝时一切正常,但是在Track类里面就会抛出异常。具体代码如下

序列化深拷贝方法:

 public static <T> T deepClone(T obj) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(obj);
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return (T) ois.readObject();
    }
Track部分代码

private final Set<PhysicalObject> objectSet;

 /**
     * 获取该轨道所有物体和对应的位置
     * 前置条件:无
     * 后置条件:返回物体集合的深拷贝set,防止rep exposure
     *
     * @return 物体的set
     * @throws IOException 深拷贝
     * @throws ClassNotFo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值