我想创建一个通用方法来组合集合.
public class CollectionsHelper {
public static Set<?> combineSets(Set<?> set1, Set<?> set2){
return Collections.unmodifiableSet(new HashSet<?>() {{
addAll(set1);
addAll(set2);
}});
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了编译错误:
通配符类型'?' 无法直接实例化
使用泛型类型参数而不是通配符:
public static <T> Set<T> combineSets(Set<T> set1, Set<T> set2)
{
return Collections.unmodifiableSet(new HashSet<T>() {{
addAll(set1);
addAll(set2);
}});
}
Run Code Online (Sandbox Code Playgroud)
第二个想法,我不会使用匿名HashSet子类实例.我更喜欢:
public static <T> Set<T> combineSets(Set<T> set1, Set<T> set2)
{
HashSet<T> set = new HashSet<>(set1);
set.addAll (set2);
return Collections.unmodifiableSet(set);
}
Run Code Online (Sandbox Code Playgroud)