使用Generic类型具有一般方法

时间:2014-03-04 23:54:20

标签: java

我希望在Java中有一个给定列的方法(s(数组从主列中提取这些列。

我写了以下代码:

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数据,它不起作用,所以我必须编写另一个方法来接受int数据来做同样的事情。此外,如果我想再次使用int输出,我应该有另一种方法来生成相同的东西但是使用字符串格式。

因此,要为所有不同的输入和输出类型需求提供函数,我应该编写并调用4种不同的方法。 JAVA中是否有任何方法可以合并所有这些方法,并且有一种方法可以接受通用输入并生成通用输出?

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容来定义通用输入和输出(使用but)...

public static <T> T[][] extractCol(Class<T> componentType, T[][] matrix, int[] col) {
  T[][] output = (T[][]) Array.newInstance(componentType, matrix.length, col.length);
  ...
}

但是这只适用于像Integer这样的对象输入和输出类型,但不适用于原始类型int(这可能会使此解决方案对您的用例无用),因为这使用泛型,Java中的泛型仅用于对象。

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

答案 1 :(得分:0)

你可以这样做:

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;   
}

答案 2 :(得分:0)

public static Object[][] extractCol(final Object[][] matrix, final int[] col){
    final Object [][] output = new Object [matrix.length][col.length];
     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];   
         }
    }
    return output;   
}

不能使用generic来创建数组...

或者你可以用方法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];   
         }
    }
}