问题描述
给定以下 java 代码:
public static <I extends Serializable,L extends List<I> & Serializable> L getList() {
return new ArrayList<I>(); // <-- Compile error
}
鉴于 ArrayList
确实扩展了 Serializable
和 List
,为什么会产生编译错误?
Incompatible types. Found: 'java.util.ArrayList<I>',required: 'L'
解决方法
我想出了这个解决方案:
public interface SerializableList<T> extends List<T>,Serializable {
}
public class SerializableArrayList<T> extends ArrayList<T> implements SerializableList<T> {
public SerializableArrayList(int initialCapacity) {
super(initialCapacity);
}
public SerializableArrayList() {
}
public SerializableArrayList(Collection<? extends T> c) {
super(c);
}
}
然后每当我需要 Serializable
List
类型时,我都可以使用 SerializableList
接口及其实现 SerializableArrayList