初始化Set的通用方法

Spe*_*ius 2 java generics

我想创建一个通用方法来组合集合.

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)

但是我得到了编译错误:

通配符类型'?' 无法直接实例化

Era*_*ran 7

使用泛型类型参数而不是通配符:

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)