我有以下课程:import lombok.Data;import java.io.Serializable;@Datapublic class Person implements Serializable { private String age;}主要应用import org.apache.commons.lang3.SerializationUtils;public class MainApp { public static void main(String[] args) { Person v = new Person() {{ setAge("SD"); }}; Person person2 = SerializationUtils.clone(v); }}测试班import org.apache.commons.lang3.SerializationUtils;import org.junit.Test;public class TestClass { @Test public void test() { Person v = new Person() {{ setAge("SD"); }}; Person person2 = SerializationUtils.clone(v); }}在主应用程序中,序列化有效,而在单元测试中则无效。它抛出带有以下详细信息的 SerializationException:org.apache.commons.lang3.SerializationException: java.io.NotSerializableException: com.mypackage.TestClass我正在使用 intellij,该项目是 maven 项目,测试是 JUnit4。依赖版本: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency>请指教我该如何解决?
1 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
您在测试中声明了一个匿名类。
非静态范围内的匿名类(在实例方法、构造函数、实例初始值设定项或实例成员初始值设定项中)隐式地包含对封闭类(在本例中为TestClass)的引用。
由于该类不可序列化,因此无法序列化。
改为将您的匿名子类声明为静态类。
public class TestClass {
@Test
public void test() {
Person v = new TestPerson();
Person person2 = SerializationUtils.clone(v);
}
static class TestPerson extends Person {
{
setAge("SD");
}
}
}
或者,最好不要使用双括号初始化,特别是如果您不了解它在序列化(以及其他问题)方面引起的问题:
Person v = new Person();
v.setAge("SD");
Person person2 = SerializationUtils.clone(v);
添加回答
举报
0/150
提交
取消