gpt4 book ai didi

java - 为什么 Guava 不为小型 ImmutableLists 使用专门的类?

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

Guava 的 ImmutableList有一系列重载的 of() 方法。正如在 this solved question 的上下文中讨论的那样,这些存在是为了避免在将可变参数与泛型混合时出现警告。

但除此之外,0 和 1 参数方法各自依赖于专门的列表实现。似乎可以对 2..11 参数方法做同样的事情,从而减少这些列表的内存消耗——按照

final class ImmutableListWith2Elements<E> extends ImmutableList<E> {
final E e1;
final E e2;
...

相反,他们使用基于数组的实现,这意味着除了内容引用之外,还存储一个数组对象和对数组的引用。你能帮我理解这里涉及的权衡吗?

最佳答案

Can you help me understand the trade-offs involved here?

这是一个权衡:

  • 性能 - 不分配临时数组可以节省开支。但是,需要进行一些广泛的代码分析和基准测试才能量化这种节省。 (我怀疑在大多数应用程序中它是微不足道的。并阅读@Voo 贡献的 this link!)
  • 可读性——一堆额外的重载使 javadoc 变得困惑。
  • 可维护性——以不需要临时对象的方式实现大量重载将需要大量的复制/粘贴编程,这使得 future 的代码维护更加困难。
  • 效用——这些重载的使用频率是多少?我希望答案是“很少”。
  • 字节码足迹——这些额外的重载会导致每个使用 Guava JAR 文件的应用程序膨胀。

我的建议:

  • 不要为此打扰 Guava 开发人员。他们已经做出权衡取舍的决定。你只会白费力气。
  • 如果缺少这些类或方法会影响您的应用程序,请自行添加。 (但尝试以不涉及 Guava 的私有(private)“分支”的方式进行……因为从长远来看,您可能会后悔。)

郑重声明,我认为 Guava 开发人员是正确的。

关于java - 为什么 Guava 不为小型 ImmutableLists 使用专门的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568440/

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