gpt4 book ai didi

java - 将 ImmutableCollection 作为参数与创建本地副本

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

当使用 Guava 时 ImmutableCollection作为函数的参数,最好是要求 ImmutableCollection作为参数类型:

void <T> foo(ImmutableCollection<T> l)

或者该函数应该采用 Collection<T>并创建一个不可变的集合本身,如

void <T> foo(Collection<T> l)
{
ImmutableCollection<T> l2 = ImmutableCollection.copyOf(l);

// ...
}

第一个版本似乎更可取,因为调用者确信他传递给函数的映射没有被它修改。但第一个版本需要带有集合的客户端代码才能调用 copyOf() ,即:

Collection collection = map.values();
foo(ImmutableCollection.copyOf(collection));

// instead of simply

foo(collection);

PS:这并不完全正确,因为 ImmutableCollection没有 copyOf()但是ImmutableListImmutableSet做。

最佳答案

我认为这取决于 foo 是什么函数应该与集合参数有关。

  • 如果 foo将读取集合元素,然后 void <T> foo(Collection<T> l)更可取,因为它将决定权留给调用者。

  • 如果 foo将集合合并到某个对象的状态中,那么不可变集合可能更可取。然而,我们需要问自己它是否应该是 foo处理此问题的方法的责任,或调用者的责任。

对此没有一个正确的(或“最佳实践”)答案。但是,使用 ImmutableCollection因为参数的正式类型可能导致复杂性和/或不必要的复制在某些情况下

关于java - 将 ImmutableCollection 作为参数与创建本地副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187822/

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