在 Java 中将不可变实例分配给 Collection 的最佳方法

发布于 2024-08-31 05:08:32 字数 507 浏览 4 评论 0原文

今天我在阅读一些 Hibernate 代码时遇到了一些有趣的事情。 有一个名为 CollectionHelper 的类,它定义了以下常量变量:

public final class CollectionHelper {

   public static final List EMPTY_LIST = Collections.unmodifiableList( new ArrayList(0 ) ;
public static final Collection EMPTY_COLLECTION = Collections.unmodifiableCollection(new ArrayList(0) );
public static final Map EMPTY_MAP = Collections.unmodifiableMap( new HashMap(0) );

他们使用这些常量来初始化具有不可变实例的集合。为什么他们不简单地使用 Collections.EMPTY_LIST 来初始化列表?使用以下方法有好处吗?

Today I was reading through some Hibernate code and I encounter something interesting.
There is a class called CollectionHelper that defines the following constant varibale:

public final class CollectionHelper {

   public static final List EMPTY_LIST = Collections.unmodifiableList( new ArrayList(0 ) ;
public static final Collection EMPTY_COLLECTION = Collections.unmodifiableCollection(new ArrayList(0) );
public static final Map EMPTY_MAP = Collections.unmodifiableMap( new HashMap(0) );

They have used these constants to initialize collections with immutable instances. Why they didn't simply use the Collections.EMPTY_LIST for initializing lists? Is there a benefit in using the following method?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

温折酒 2024-09-07 05:08:32

不,没有任何好处。对我来说唯一明显的区别是,此方法保证返回与使用 Collections.emptyList() 创建的任何 List 不同的 EMPTY_LIST,而Collections.emptyList() 的实现可能会也可能不会返回相同的 List 实例。我更倾向于同意 @WizardOfOdds 的评论,他们根本不了解这些 API 函数。

No, there is no benefit. The only difference apparent to me is that this method is guaranteed to return a different EMPTY_LIST than any List created with Collections.emptyList(), whereas implemenations of Collections.emptyList() may or may not return the same List instances. I am more inclined to agree with @WizardOfOdds's comment that they simply didn't know about those API functions.

高冷爸爸 2024-09-07 05:08:32

有时,它可以通过减少特定调用站点使用的实现数量来提高性能,从而允许更好的单态和双态内联优化。不过,这个机会有点远。

The may be times when it improves performance by reducing the number of implementations used at a particular call-site, allowing better monomorphic and bimorphic inlining optimisations. Bit of a long shot, though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文