为什么 java.util.ImmutableCollections 不是公开的? [已关闭]

问题描述 投票:0回答:1

我的问题与实用方法的返回类型有关,例如

List.of()
Set.of()
Map.of()
等。

  1. 为什么这些类型不是
    public
  2. 未来版本有可能出现这种情况吗?

例如,如果

java.util.ImmutableCollections$List12
可供使用(例如,在像
ImmutableList
这样的用户友好包装器中,它可以
extends List
),那么它可以用于声明具有不可变列表的
record
,而无需指定规范和/或紧凑的构造函数并消除对任何外部库的需要。

public record MyRecord(ImmutableList<MyType> list) {}

参考:在 Java 记录中强制执行不可变集合?

抄送:@BrianGoetz

java immutability java-record immutable-collections
1个回答
0
投票

您提到的类,例如

ImmutableCollections$List12
,是Java平台的内部实现细节,它们不属于公共API的一部分。这些内部类并不适合开发人员直接使用,并且它们的 API 可能会在 Java 版本之间发生更改,恕不另行通知。

这些类不公开的原因是为了让 Java 开发团队能够灵活地更改内部实现,而不影响公共 API。通过将这些类保留在内部,Java 团队可以提高性能、修复错误或根据需要进行其他更改,而不会破坏依赖公共 API 的现有代码。

关于这些类在未来版本中公开的可能性,很难预测 Java API 的具体变化。然而,Java 的一般原则是提供稳定且定义良好的公共 API,同时允许内部实现改进的灵活性。

如果您对使用不可变集合感兴趣,您可能需要探索提供此类功能的第三方库。像 Guava 或 Apache Commons Collections 这样的库提供了带有公共 API 的不可变集合,您可以在代码中使用它们。

在您提供的示例中:

public record MyRecord(ImmutableList<MyType> list) {}

如果

ImmutableList
是第三方库,并且它提供了所需的不变性和功能,那么在记录声明中使用它是一种合理的方法。这样,您就可以实现所需的不变性,而无需依赖内部 Java 类或功能。

© www.soinside.com 2019 - 2024. All rights reserved.