由于Java泛型的实现,您不能拥有这样的代码:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持类型安全的同时实现这一点?
我在Java论坛上看到了这样的解决方案:
import java.lang.reflect.Array;
class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
Run Code Online (Sandbox Code Playgroud)
但我真的不知道发生了什么.
我有多个Set<String>
我需要合并为一个Set<String>
.如何在Java中执行此操作?请注意,我正在guava
尽可能地使用API来帮助解决问题.例如,我有3个类如下.
public class One {
public static Set<String> SET = Sets.newHashSet("a","b","c");
}
public class Two {
public static Set<String> SET = Sets.newHashSet("a","d","e","f");
}
public class Three {
public static Set<String> SET = Sets.newHashSet("w","x","y","f");
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要将这些集合的任意组合合并为一个.例如,我可能需要合并
One.SET
+ Two.SET
+ Three.SET
成一个产生{"a","b","c","d","e","f","w","x","y"},One.SET
+ Three.SET
成一个产生{"a","b","c","w","x","y","f"},Two.SET
+ Three.SET
成一个产生{"a","d","e","f","w","x","y"},我创建了一个合并集合数组的方法Set<String>[]
,但是这不起作用(这里通过这个SO文章在Java中创建一个集合数组来解释).这是要合并的代码.它有效(编译).
public static Set<String> immutableSetOf(Set<String>[] sets) {
Set<String> set = new HashSet<String>();
for(Set<String> s : sets) {
set.addAll(s);
}
return …
Run Code Online (Sandbox Code Playgroud)