您本质上要求的是连接两种类型的类型定义:
<type-def> a = null;
您需要的是替换为<type-def>
规范,确保引用的对象同时a
实现. Java 语言不支持这样的类型定义。Serializable
Collection<? extends Serializable>
正如您已经写过的,最明显的解决方案可能是声明您自己的接口,加入这两个其他接口:
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
标记只是一个非正式的“标签”,因此确保您的集合及其内容实现Serializable
仍然不能保证集合及其内容实际上可以被序列化。