【问题标题】:Java Tuple Without Creating Multiple Type Parameters不创建多个类型参数的 Java 元组
【发布时间】:2015-05-14 01:06:26
【问题描述】:

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

例如,可以为每个不同类型的 Tuple 创建一个不同的类,每个都有不同数量的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 的元组对象:

public class Tuple{

    private Object[] objects;

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

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

除非使用 this,否则一旦从元组中取出所有对象,都必须将它们转换为正确的子类,使其类似于 ArrayList&lt;Object&gt;,但功能较少。

有没有办法只创建一个单一的类,并有多个 Type Parameters 而不定义所有它们(如在第一个示例中),使用类似的东西?

public class Tuple<T...>{

}

【问题讨论】:

    标签: java tuples


    【解决方案1】:

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

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

    这个元组实现对我来说非常有用,我会在许多其他项目中不断采用它。

    【讨论】:

      【解决方案2】:

      一个可怕的解决方法。

      您只需要一个课程Pair&lt;A, B&gt;。然后,您可以使用Pair&lt;T1, Pair&lt;T2, Pair&lt;T3, T4&gt;&gt;&gt; 而不是QuadraTuple&lt;T1, T2, T3, T4&gt;

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

      永远不要这样做。

      【讨论】:

        【解决方案3】:

        不。如果您想要类型安全,则必须像在第一个代码 sn-p 中介绍的那样创建它们。有一些库可以为您执行此操作,例如 jOOL

        【讨论】:

          猜你喜欢
          • 2011-09-29
          • 1970-01-01
          • 1970-01-01
          • 2011-11-30
          • 2020-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多