我希望在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中是否有任何方法可以合并所有这些方法,并且有一种方法可以接受通用输入并生成通用输出?
答案 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];
}
}
}