当前位置: 首页 > 面试题库 >

为什么Guava类提供了这么多的工厂方法,而不仅仅是提供varargs的方法?

邹京
2023-03-14
问题内容

查看Guava的ImmutableList(和其他一些类),您会发现很多重载的of便捷方法(“按顺序返回包含给定元素的不可变列表”。)这些方法使用不同数量的参数:

...
public static <E> ImmutableList<E> of(E e1, E e2, E e3) 
public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4) 
public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5) 
...

一直到这一步:

public static <E> ImmutableList<E> of(E e1,
                                      E e2,
                                      E e3,
                                      E e4,
                                      E e5,
                                      E e6,
                                      E e7,
                                      E e8,
                                      E e9,
                                      E e10,
                                      E e11,
                                      E e12,
                                      E... others)

我的一些同事认为这很愚蠢,想知道为什么不只有一种方法:of(E... elements)。他们怀疑这是不正确的性能“优化”,属于“您认为自己比编译器更聪明”之类的东西。

我的直觉是Kevin Bourrillion等。出于真正的原因将这些方法放在那里。谁能解释(或推测)那可能是什么原因?


问题答案:

来源中的评论说:

// These go up to eleven. After that, you just get the varargs form, and
// whatever warnings might come along with it. :(

这样做是因为varargs方法会产生带有通用参数的警告。



 类似资料:
  • 问题内容: 有人知道为什么JUnit 4提供但不提供方法吗? 它提供了(对应于)和(对应于),因此它们似乎没有包含在内就显得很奇怪。 顺便说一下,我知道JUnit插件提供了我正在寻找的方法。我只是出于好奇而问。 问题答案: 我建议您使用较新的样式断言,该断言可以轻松描述各种否定形式,并在断言失败时自动构建对您的期望和得到的结果的描述: 这三个选项都是等效的,请选择最容易阅读的一个。 要使用方法的简

  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 本质上,它包装了,确保了最大容量,并提供了一些其他有用的特性。更好的方法是直接将其实现为。 现在,为了方便起见,我认为最好实现,这样,如果您想要循环它,就可以使用增强的for-loops。(我的类还提供了方法,因此我认为是合理的。) 接口提供以下功能(省略了javadoc): null

  • 问题内容: 我想知道为什么接口不提供和方法。考虑以下类别: 它是 一手 牌的一种实现,因为您在玩交易纸牌游戏时可以手拿牌。 本质上,它包装了,可确保最大容量并提供其他一些有用的功能。最好将其直接实现为。 现在,为了方便起见,我认为实现起来会很不错,这样,如果您想对其进行循环,则可以使用增强的for循环。(我的课程也提供了一种方法,因此我认为该方法是合理的。) 该界面提供了以下内容(省略了javad

  • 问题内容: 类允许客户获得实例的通常方法是提供一个公共构造器。另一种方法是提供一个公共的静态工厂方法,该方法只是一个返回类实例的静态方法。使用静态工厂方法的优缺点是什么? 问题答案: 《有效Java》一书中的这一章对此进行了很好的解释:考虑使用Static Factory而不是Constructors 。它以您可以理解的最佳方式说明了它们各自的优缺点。 只是引用本书的优点和缺点: 优点 : 静态工

  • 我正在检查类,并发现LinkedList类提供了几种方法 所有这3个方法都在列表的头部添加了一个元素。那么为什么不同的实现需要相同的功能呢? 是因为推是为了斯塔克和 offerFirst–退出队列 addFirst-LinkedList 还是一些其他的基本面? 请在这里分享一些见解。谢谢