gpt4 book ai didi

Java:如何确保可序列化的集合

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:38 30 4
gpt4 key购买 nike

在 Java 中,Collection 接口(interface)不扩展 Serializable 有几个很好的理由。此外,这些接口(interface)的大多数常见实现都实现了 Serializable。

因此,如果实现本身是可序列化的(通常是这种情况)并且如果集合中的对象都是可序列化的,则实现集合接口(interface)之一的对象是可序列化的。

但是我怎样才能确保满足这两个条件呢?我不想遇到运行时错误,因为编译器可以检查这些条件。我正在考虑一些明显的界面,例如(列表界面的展示):

public interface SerializableList<T extends Serializable> extends Serializable, List<T> {}

我想知道是否没有其他人遇到过这个问题并提出了这个简单的解决方案。到目前为止,我找不到任何解决方案甚至对此进行讨论,这让我对我的想法产生了怀疑。

最佳答案

您本质上要求的是连接两种类型的类型定义:

<type-def> a = null;

您需要的是 <type-def> 的替代品使用规范,确保 a 引用的对象同时实现 Serializable以及Collection<? extends Serializable> . Java 语言不支持这样的类型定义。

正如您已经写过的,最明显的解决方案可能是声明您自己的接口(interface),加入这两个其他接口(interface):

interface SerializableCollection<T extends Serializable> extends Collection<T>, Serializable {}

看起来没问题,直到你尝试这样的事情:

SerializableCollection<String> a = new ArrayList<String>();

但这不会编译。即使ArrayList<String>同时实现 Collection<? extends Serializable>Serializable , 该类没有实现 SerializableCollection<String> .

现在,如果愿意,您甚至可以通过声明一个新类来规避这个问题:

SerializableArrayList<T extends Serializable> extends ArrayList<T> implements SerializableCollection<T> {}

现在您基本上已经组合了所需的所有内容并且能够满足原始要求:

SerializableCollection<String> a = new SerializableArrayList<String>();

值得付出努力吗?在你的情况下,你必须决定,但我会说不。我的论点是,自 Serializable marker 只是一个非正式的“标签”,确保您的 Collection 及其内容都实现 Serializable仍然不能保证集合及其内容实际上可以被序列化。

关于Java:如何确保可序列化的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804974/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com