假设项目A中的以下界面
interface Business extends Serializable{//project A
void do_work();
}
这里我们在项目B中有一个实现了接口的类
class LocalBusiness implements Business{
private static final long serialVersionUID = 0xF109BAC00L;
void do_work(){
System.out.print("Hi there\n");
}
}
然后我将在某个州处编组(序列化)LocalBusiness
的实例。
我的问题是,我想在项目C中解组它,项目C需要(classpath)实际实现Business
接口吗?
答案 0 :(得分:3)
是的,它应该。运行时类型的类名由默认序列化机制序列化。此类名用于确定反序列化的运行时类型。如果Java找不到具有接收名称的类(和serialVersionUID),它将抛出异常。试试,你会看到。
旁注:您的界面扩展为Serializable
。在大多数情况下,这被认为是不好的做法。
答案 1 :(得分:2)
是。 ObjectOutputStream
不包含写入其中的对象的任何类字节码。
但是,如果您使用 RMI 来调用另一台计算机上的方法,则可以使用动态类加载,这样一台计算机就可以从另一台计算机加载代码 - 甚至是第三台计算机。