gpt4 book ai didi

java - 为什么 Google Guava 在存在等效构造函数的情况下提供静态方法?

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:43 25 4
gpt4 key购买 nike

我注意到 Google Guava Sets类提供诸如 newHashSet 之类的方法采用 IterableIteratorHashSet与 Java 捆绑在一起的类已经提供了一个采用 Collection 的构造函数,从而提供了类似的行为。

所以我很好奇……Guava Sets 中这些特定静态方法的优势是什么?是否仅仅是 IterableIterator 对象不是也是 Collection?还是 Guava 团队有其他目的费心包含这些方法?

最佳答案

Iterable接口(interface)在Java 1.5中引入,是Collection接口(interface)的基础接口(interface)

HashSet 构造函数早于此修改,我认为为了兼容性,他们将其保留为 Java 1.5

另一方面,Guava 不受此更改的限制,为方便起见,提供了采用 Iterator 的构造函数。

默认情况下,Iterable 构造函数尝试将 Iterable 转换为 Collection,如果不可能,则继续提取其 Iterator 并调用 Iterator 构造函数。

在我看来,这为图书馆用户提供了更好的灵 active 。

存在 Sets 实用程序类的另一个原因是在 Java 1.5 和 1.6 中调用泛型构造函数时需要手写。

这个特殊问题在 1.7 中通过引入钻石运算符得到了解决。

举例说明。

1.7 之前

ArrayList<String> myList = ...
// See generic parameter repeated
HashSet<String> mySet = new HashSet<String>( myList );
// No such issue for statics
HashSet<String> myGuavaSet = Sets.newHashSet( myList );

1.7 之后

ArrayList<String> myList = ...
// Notice diamond
HashSet<String> mySet = new HashSet<>( myList );
// Really no reason now to use Guava for HashSet construction in most cases

关于java - 为什么 Google Guava 在存在等效构造函数的情况下提供静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com