我有这样的代码
Class Base implements java.io.Serializable, Cloneable
{
}
Class Derived extends Base
{
private Aclass class;
}
Class AClass 未实现 java.io.Serializable
我将Base b = (Base) d;
传递给远程方法。我收到了一个错误
发生了“java.rmi.MarshalException”。异常消息是“错误编组参数;嵌套异常是:
java.io.NotSerializableException:Aclass“
我理解作为参数传递给远程方法的对象必须是Serializable或 导出的远程对象。
答案 0 :(得分:2)
您的Base或Derived类都没有实现私有方法所有具体的Serializable clases must implement:
在序列化期间需要特殊处理的类 反序列化过程必须实现这些特殊方法 确切的签名:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
答案 1 :(得分:2)
您必须在要编组的所有类中实现Serializable
接口。您还可以使用transient
关键字跳过编组中的某些元素。标有transient
的属性未在Java中序列化。