有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何调用泛型类型为T[]的方法作为参数?

好的,假设我有这个方法头:
public static <T extends Comparable<T>> void qSort(T[] a, int p, int q)

假设我想让T[]a保持{5,2,7,3,8,9}。我将如何创建这个T[]a,如果我想测试它,我将如何调用这个方法?我有点困惑

我试着更新我的问题,让它更清楚。如果有不清楚的地方,请发表评论

有什么事吗


共 (3) 个答案

  1. # 1 楼答案

    首先:不能使用基元数组来保存对象数组中需要的元素;他们是不相容的类型

    请记住,泛型类型参数T总是一个Object(相对于其边界)。如果您想在其中获得任何类型的数值引用,那么还应该绑定到Number(这是所有数值包装类的超类)

    public static <T extends Number & Comparable<T>> void qSort(T[] a, int p, int q)
    

    现在,关于你将要通过的阵列。。。它必须是Integer的数组,而不是int[]

    Integer[] vals = new Integer[]{5,2,7,3,8,9};
    

    由于自动装箱,上述情况是可能的,并且intassignment compatibleInteger

    现在,如果你想调用它,你现在把必要的参数传递给它

    qsort(vals, 0, 10);  // for instance
    
  2. # 2 楼答案

    qSort( new Integer[] { 5,2,7,3,8,9 }, 0, 5 );
    

    需要注意的重要一点是,第一个参数的类型是Integer[],而不是int[]

  3. # 3 楼答案

    Java有一个名为autoboxing特性。你的例子是

    qSort( new Integer[]{5,2,7,3,8,9}, p, q)
    

    请注意,数组不是基于基元类型int,而是由编译器自动将其中的int值“自动装箱”到Integer。由于Integer实现了Comparable,这应该是可行的