传递 ImmutableSet 代替 Set?

发布于 2024-08-19 00:59:49 字数 503 浏览 6 评论 0原文

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

我可以通过传入以下内容来对集合执行此操作:

 Collections.unmodifiableSet(Sets.newHashSet())

但我想传入:

 ImmutableSet.of()

如果我执行前者,则会创建 Set并且收到“方法不适用于 args Set”错误。如果我执行后者,我得到 ImmutableSet已创建,并且得到类似的错误:

...

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

但看起来很丑,我想找到一种 Google Collections 方式。

I have a method that expects a Set parameter. I want to pass in an empty set, and I don't want any side effects on the Set.

I can do this with collections by passing in:

 Collections.unmodifiableSet(Sets.newHashSet())

But I want to pass in:

 ImmutableSet.of()

If I do the former a Set<Object> is created and I get "method not applicable for args Set' error. If I do the latter I get ImmutableSet<Object> is created and I get similar error.

This works:

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

... but seems ugly, and I want to find a Google Collections way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃颗糖壮壮胆 2024-08-26 00:59:49

尝试一下:

ImmutableSet.<String>of()

这也可以:

Collections.<String>emptySet()

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

Try this:

ImmutableSet.<String>of()

This will work too:

Collections.<String>emptySet()

This syntax is useful for manually specifying type arguments any time the type inference fails. :-)

听不够的曲调 2024-08-26 00:59:49

这也将起作用:

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

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

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

This will also work:

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

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

because the type inference notices that you are assigning to a Set<String> variable and knows that the type parameter must be String.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文