Java 不创建多个类型参数的元组

Java Tuple Without Creating Multiple Type Parameters

有什么方法可以在 Java 中创建一个 Tuple,而不必创建多个 class 吗?

例如,可以为每种不同类型的元组创建不同的class,每个元组具有不同数量的Type Parameters:

public class SingleTuple<T>{}
public class DoubleTuple<T1, T2>{}
public class TripleTuple<T1, T2, T3>{}
public class QuadraTuple<T1, T2, T3, T4>{}
public class PentaTuple<T1, T2, T3, T4, T5>{}

也可以创建一个没有任何 Type Parameters 的 Tuple 对象,只需这样做:

public class Tuple{

    private Object[] objects;

    public Tuple(Object... objects){
        this.objects = objects;
    }

    public Object get(int index){
        return this.objects[index];
    }
}

除非使用它,否则所有对象都必须在从元组中取出后转换为正确的子class,使其像 ArrayList<Object>,但是功能较少。

有没有什么方法可以只创建一个单数 class,并有多个 Type Parameters 而无需定义所有的 Type Parameters,使用类似这样的方法?

public class Tuple<T...>{

}

没有。如果你想要类型安全,你必须像你在第一个代码片段中展示的那样创建它们。例如,有些图书馆可以为您执行此操作,jOOL

一个可怕的解决方法。

您只需要 class Pair<A, B>。然后,您可以使用 Pair<T1, Pair<T2, Pair<T3, T4>>> 而不是 QuadraTuple<T1, T2, T3, T4>

要从中得到 T3,您必须写成 T3 t3 = quadraTuple.second().second().first();。它是类型安全的并且可以扩展到任意数量的参数。

永远不要这样做。

我在 Java 中设计了一个实现类型不安全元组 (Tuple class) 的库,灵感来自 Python 语言的元组。 与其他答案一样,如果您想要 Java 中的类型安全,您应该为元组的每个元素定义一个通用类型。或者,您可以在运行时检查预期的类型,并且可以捕获一种 Java 异常。我的库还公开了一个类型化元组 (BoundTuple class),它允许在运行时执行更严格的类型检查,以便在必要时最大限度地减少编程错误。要执行严格的类型检查,开发人员必须创建一个架构 (TupleSchema class),并且他必须在对绑定元组实例调用 get() 方法时指定预期的类型。

我邀请您在 GitHub 上查看我的存储库:JTuple

这个元组实现对我非常有用,我一直在许多其他项目中采用它。