我实现Serializable
来保存对象,如下所示:
public class MyType implements Serializable {
@Override
public String toString() {
return "This is a MyType";
}
public static void main(String[] args) {
try {
ObjectOutputStream outStream = new ObjectOutputStream(
new FileOutputStream("objecturl");
outStream.writeObject(new MyType());
outStream.flush();
} catch (Exception e) { e.printStackTrace(); }
}
}
我运行该程序一次,MyType
保存在objecturl
。
然后,我将这个单类库打包到jarurl
的jar中。
如果我想使用我保存在新程序中的对象,在给定包含MyType
的jar的情况下,如何将MyType.class
访问我的新程序?
换句话说,我如何在jarurl
使用jar来允许以下内容无法获得ClassNotFoundException
?
public class NewProgram {
public static void main(String[] args) {
try {
ObjectInputStream inStream = new ObjectInputStream(
new FileInputStream("objecturl");
Object o = inStream.readObject();
System.out.println(o.toString());
} catch (Exception e) { e.printStackTrace(); }
}
}
输出为"这是MyType",MyType
与NewProgram
不在同一个库中。
显然还有其他方法可以让程序输出"这是一个MyType"。我主要关注的是使用序列化的,重写的实现。
我知道这有something to do with ClassLoaders,但我不确定它在这个设置中是如何工作的,其中类的类型是完全未知的,但是类的父类是已知的。< / p>
答案 0 :(得分:1)
我自己也没有这样做,但是通过谷歌搜索似乎有两个阶段来解决这个问题。