Java:通过引用Collection克隆任意Collection

Rne*_*net 10 java collections

假设您java.util.Collection在方法中有类型的引用,并且无法说明java.util.Collection它在运行时指向的实现,是否可以克隆集合?

我想实现一个泛型方法,它将过滤给定的任何类型的集合.因此,该方法将java.util.Collection作为输入.但除此之外,我不想修改原始集合,所以我想克隆集合.

Ral*_*lph 9

不幸的是,接口Collection没有说明实现Clonable接口的任何内容.


但你总能做的是复制集合:

List<T> copy = new ArrayList<T>(original);
Run Code Online (Sandbox Code Playgroud)

如果您只想确保它没有被修改,那么用一个unmodidfiable集合包装它而不是克隆它:

Collection<T> unmodifiable = Collections.unmodifiableCollection(original);
Run Code Online (Sandbox Code Playgroud)


Ber*_*t F 2

我看到三个选项:

  1. 依赖集合自己的clone方法(假设它实现Cloneable),然后删除不需要的元素。 编辑:正如评论和其他答案中所指出的,clone()它不是公开的,因此无法访问。

  2. 要求调用者提供一个空集合以在源和目标之间复制目标元素。

  3. 定义一个工厂接口来创建一个空集合并要求调用者提供工厂实现。然后在源和目标之间复制目标元素。