传递ImmutableSet代替Set?

时间:2010-01-27 18:07:39

标签: collections guava

我有一个需要Set参数的方法。我想传入一个空集,我不希望对Set有任何副作用。

我可以通过传递来收集馆藏:

 Collections.unmodifiableSet(Sets.newHashSet())

但我想传入:

 ImmutableSet.of()

如果我执行前者,则创建Set<Object>并且我得到“方法不适用于args Set'错误。如果我执行后者,我会创建ImmutableSet<Object>并且我得到类似的错误。< / p>

这有效:

 Collections.unmodifiableSet(new HashSet<String>())

...但似乎很难看,我想找到一种Google Collections方式。

2 个答案:

答案 0 :(得分:9)

试试这个:

ImmutableSet.<String>of()

这也可以:

Collections.<String>emptySet()

此语法对于在类型推断失败时手动指定类型参数很有用。 : - )

答案 1 :(得分:0)

这也有效:

public static void main(String[] args) {
    Set<String> emptySet = ImmutableSet.of();
    doStuffWith(emptySet);
}

static void doStuffWith(Set<String> strings) {
    // ...
}

因为类型推断会注意到您要分配给Set<String>变量,并且知道类型参数必须是String