Java 使用泛型类型具有通用方法

Java 使用泛型类型具有通用方法,java,Java,我想在Java中有一个方法,该方法使用数组的给定列,它从主列中提取这些列 我编写了以下代码: public static String[][] extractCol(String[][] matrix, int[] col){ String [][] output = new String [matrix.length][col.length]; int con=0; for (int i = 0; i < matrix.length; i++) {

我想在Java中有一个方法,该方法使用数组的给定列,它从主列中提取这些列

我编写了以下代码:

public static String[][] extractCol(String[][] matrix, int[] col){


     String [][] output = new String [matrix.length][col.length];
     int con=0;  
     for (int i = 0; i < matrix.length; i++) {
         con=-1;
         for (int j = 0; j < col.length; j++) {
             con++;
             output[i][con]=matrix[i][col[j]];   
         }


    }
        return output;   
    }
公共静态字符串[][]提取列(字符串[][]矩阵,int[]列){
字符串[][]输出=新字符串[matrix.length][col.length];
int con=0;
对于(int i=0;i
但是,如果输入数据是int数据,它就不起作用,因此我必须编写另一个方法来接受int数据,以完成完全相同的事情。此外,如果我想再次进行int输出,我应该有另一个方法来生成相同的东西,但采用字符串格式


因此,为了使函数满足所有不同的输入和输出类型的需要,我应该编写并调用4种不同的方法。在JAVA中有没有办法合并所有这些方法,并使用一种方法来接受通用输入并生成通用输出?

您可以这样做:

public static Object[][] extractCol(Object[][] matrix, int[] col){
    Object[][] output = new Object[matrix.length][col.length];
    int con=0;  
    for (int i = 0; i < matrix.length; i++) {
        con=0;
        for (int j = 0; j < col.length; j++) {
            output[i][con]=matrix[i][col[j]];   
            con++;
        }    
    }
    return output;   
}
公共静态对象[][]提取列(对象[][]矩阵,int[]列){
Object[][]输出=新对象[matrix.length][col.length];
int con=0;
对于(int i=0;i
公共静态对象[][]提取列(最终对象[][]矩阵,最终整型[]列){
最终对象[][]输出=新对象[matrix.length][col.length];
int con=0;
对于(int i=0;i
无法使用泛型创建数组

或者可以在方法args中给出输出

public static <T>void extractCol(final T[][] matrix, final int[] col, final T[][] output){
     int con=0;  
     for (int i = 0; i < matrix.length; i++) {
         con=-1;
         for (final int element : col) {
             con++;
             output[i][con]=matrix[i][element];   
         }
    }
}
publicstaticvoidextractcol(最终T[][]矩阵,最终int[]列,最终T[][]输出){
int con=0;
对于(int i=0;i
您可以使用以下内容定义通用输入和输出(使用but)

publicstatict[]]extractCol(类componentType,T[]]matrix,int[]col){
T[][]输出=(T[][])数组.newInstance(componentType,matrix.length,col.length);
...
}
但这只适用于对象输入和输出类型,如
Integer
,但不适用于基本类型,如
int
(这可能使此解决方案在您的用例中无用),因为它使用泛型,而Java中的泛型仅适用于对象

如果要支持基元类型,则必须定义单独的方法

public static <T>void extractCol(final T[][] matrix, final int[] col, final T[][] output){
     int con=0;  
     for (int i = 0; i < matrix.length; i++) {
         con=-1;
         for (final int element : col) {
             con++;
             output[i][con]=matrix[i][element];   
         }
    }
}
public static <T> T[][] extractCol(Class<T> componentType, T[][] matrix, int[] col) {
  T[][] output = (T[][]) Array.newInstance(componentType, matrix.length, col.length);
  ...
}