我正在尝试构建自己的 JCF(玩弄以更好地理解集合)。
我创建了一个MyList<E>
实现接口的类,Collection<E>
因此有必要实现默认方法retainAll(Collection<?> c)
和<T> T[] toArray(T[] array)
.
好像发生了,但是想请教高手,在方法中是否可以通过<T> T[] toArray(T[] array)
其他方式创建一个新的更大的数组?
我试图创建一个新类型Object[]
,然后将其强制转换为T[]
,但它崩溃了ClassCastException
。
我的决定:
@Override
default boolean retainAll(Collection<?> c) {
removeIf(element -> !c.contains(element));
return true;
}
@Override
default <T> T[] toArray(T[] array) {
if (array.length != size()) {
array = Arrays.copyOf(array, array.length + (size() - array.length));
}
for (int i = 0; i < size(); i++)
array[i] = (T)get(i);
return array;
}