Java 中的元组(异构元素的不可修改有序列表)支持

2022-09-03 12:25:28

我想知道为什么Java在其标准库中没有元组数据结构实现。例如,C++很好地实现了这个固定大小的异构值集合。在Haskell中也是如此。在Java中,我只知道javatuples和通过()类型在功能Java库中的一些支持。我想知道为什么或至少根本不在标准库中?甚至Android SDK开发人员也添加了他们自己的2元组(对)实现ProductP1 - P8tuplepair


答案 1

“Java方式”是定义特定于使用的类,而不是这些轻量级的半类类型。如果你仔细想想,元组实际上只是一个简化的结构;Java的人希望你继续创建结构。

这种观点正在发生变化,特别是在Java 8及其lambdas中(这给JDK带来了压力,要求提供通用类型的接口,而不是像这样特定于用例的接口)。但对于许多Java开发人员来说,这仍然是一个相当强大的心态,并且有一定的意义。Java是一种非常静态类型的语言;元组介于静态类型和动态类型之间,因为类型系统中没有任何内容可以阻止您认为表示客户 ID 和名称实际上是表示订单 ID 及其描述的内容。FunctionFooCallback(int, String)(int, String)

例如,参见关于番石榴项目中这个问题的讨论(“n >= 2”的元组)。当然,这不是官方的。但它很好地代表了Java的思维方式。


答案 2

有一个不错的图书馆叫.它为从 1() 到 10() 的 arities 定义了泛型元组类型,以及所有基本方法,如 、 、 甚至 。javatuplesUnitDecadeequalshashCodetoStringcompareTo

官方网站: http://www.javatuples.org/
Maven 依赖关系:

<dependency>
    <groupId>org.javatuples</groupId>
    <artifactId>javatuples</artifactId>
    <version>[version]</version>
    <scope>compile</scope>
</dependency>

(目前最新版本是1.2)


推荐