首页 / JAVA / java – 可以序列化通用集合吗?
java – 可以序列化通用集合吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 可以序列化通用集合吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1859字,纯文字阅读大概需要3分钟。
内容图文
![java – 可以序列化通用集合吗?](/upload/InfoBanner/zyjiaocheng/786/6a7d179c3d53487bb4f6e196a369d17d.jpg)
如果我有一些Collection Collection< SomeClass>班;可以按原样序列化吗?或者我是否必须将其声明为ArrayList,HashSet或其他实现Serializable的具体实现?如果是这样,这样做的一般做法是什么?
解决方法:
只要SomeClass是可序列化的,SomeClass对象的任何标准java.util.collection都是可序列化的.
我一直认为这是因为Collection接口本身扩展了Serializable,但是 – 正如你在评论中指出的那样 – 事实并非如此.所以,我运行了以下测试:
public class Test {
static final String filename = "d:/desktop/employee.txt";
Collection makeColl(){
return new ArrayList();
}
void writeColl(Collection c){
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("d:/desktop/employee.txt"));
out.writeObject(c);
out.close();
} catch(IOException i){i.printStackTrace();}
}
Collection readColl(){
Object that = null;
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
that = in.readObject();
} catch(IOException | ClassNotFoundException i) { i.printStackTrace(); }
return that;
}
public static void main(String[] args) {
Test t = new Test();
t.writeColl(t.makeColl());
System.out.println(t.readColl().getClass());
}
打印的内容是:“class java.util.ArrayList”
因此,我们可以从中获得的是,虽然Collection接口不直接扩展Serializable(实际上也没有扩展List,Set或其他子接口),但这些接口的所有标准实现都可以.此外,当您调用序列化实现Collection的对象时,它将被序列化为其具体类的对象(在上述测试的情况下,为ArrayList).当然,当您序列化仅由序列化方法的接口知道的对象时,情况总是如此.
所以,回答你的问题(这是一个有趣的问题):从技术上讲,不,Collection本身并不是可序列化的,是的,确实需要是一个实现Serializable(标准实现或自定义)的类.为了序列化.但是,在实践中,不,您不需要将集合强制转换为实现以序列化它,因为Java会为您执行此操作.
为了进一步说明这一点:您可以使用一个序列化任意Collection实现的方法(例如我的示例中的那个),并且只有在未实现Serializable的非标准Collection实现传递到的情况下才会导致NotSerializableException它.
内容总结
以上是互联网集市为您收集整理的java – 可以序列化通用集合吗?全部内容,希望文章能够帮你解决java – 可以序列化通用集合吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。