【问题标题】:Generic function to swap rows and columns in an array用于交换数组中的行和列的通用函数
【发布时间】:2022-01-26 00:56:13
【问题描述】:

我想创建一个函数,它可以采用任何类型的数组(intStringboolean 等)并返回一个相同类型的数组,并切换行和列。

public static String[][] swap_rows_columns_str_arr(String[][] arr) {
    String[][] new_arr = new String[arr[0].length][arr.length];
    for (int col = 0; col < arr[0].length; col++) {
        for (int row = 0; row < arr.length; row++) {
            new_arr[col][row] = arr[row][col];
        }
    }
    return new_arr;
}

我已经设法让它适用于单一数据类型,但我如何让它适用于任何数据类型?

【问题讨论】:

  • 欢迎来到擦除类型的兔子洞。不幸的是,据我所知,您必须进行一些反思才能分配泛型类型的数组。它比它有任何权利要复杂得多。
  • 使用嵌套的泛型列表List&lt;List&lt;T&gt;&gt; 比使用数组更好。

标签: java


【解决方案1】:

您可以使用泛型类型&lt;T&gt;,但您必须使用Array.newInstance() 来创建数组(请参阅What's the reason I can't create generic array types in Java?)。源代码可以是这样的:

public static <T> T[][] swap_rows_columns_str_arr(T[][] arr) {
    @SuppressWarnings("unchecked")
    T[][] new_arr = (T[][]) Array.newInstance(
            arr.getClass().getComponentType().getComponentType(),
            arr[0].length, 
            arr.length);
    for (int col = 0; col < arr[0].length; col++) {
        for (int row = 0; row < arr.length; row++) {
            new_arr[col][row] = arr[row][col];
        }
    }
    return new_arr;
}

这仅适用于非原始类型,因为原始类型不能在泛型中使用。对于原始类型,您必须创建此方法的八个重载。

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多