我正在尝试从提供的数组(二维数组)中减去该值。我想通过使用泛型来完成。谁能帮助我的代码出了什么问题。我的意思是我需要延长一些类(class)吗?我收到错误消息(运算符 - 对于参数类型 T、T 未定义)
提前致谢。
//this method Subtracts Value from the given Matrix for all the rows but for given columns
private <T> void subtractValueFromColumns(T[][] matrix,
ArrayList<Integer> columnsIndex, T value) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < columnsIndex.size(); j++){
matrix[i][j] = matrix[i][j] - value;
}
}
}
最佳答案
如果不强制转换就无法做到(这或多或少意味着泛型在这里毫无用处)。
-
运算符只能应用于数值类型,但在编译时编译器无法识别泛型类型T
的运行时类型。
作为解决方法,我建议使用 BigDecimal
类型及其嵌套算术方法(如 .subtract()
)
private void subtractValueFromColumns(BigDecimal[][] matrix,
ArrayList<Integer> columnsIndex, BigDecimal value) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < columnsIndex.size(); j++){
matrix[i][j] = matrix[i][j].subtract(value);
}
}
}
不过,这有一个负面影响。为了正确使用该方法,您将被迫将数字变量转换为 BigDecimal
,反之亦然
关于Java 减去泛型值运算符减号未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754206/