【发布时间】:2010-11-30 14:39:52
【问题描述】:
可能重复:
Why does Guava's ImmutableList have so many overloaded of() methods?
查看 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 等人。出于真正的原因将这些方法放在那里。谁能解释(或推测)这个原因可能是什么?
【问题讨论】:
-
如果库较旧,我怀疑这些方法是在 Java 5.0 之前编写的。原始代码可能太旧了,还没有被重构。
-
@Peter:不要介意删除它们会破坏向后兼容性(代码将与不再存在的方法链接),这是他们可能不想要的。尽管它们至少可以被弃用,但就是这样。
-
@Mark,具有讽刺意味的是,不推荐使用的是 of(E[]) 构建器。 ;)
-
@Peter:
of(E[])已被弃用,而我相信更具有描述性的copyOf(E[])。而且我认为 Guava 中没有任何东西使用 1.5 之前的样式。 -
“我的一些同事认为这很愚蠢……”我笑了,因为没有人比我们真正做到这一点更愚蠢。 :)
标签: java guava variadic-functions