Java 减去泛型值运算符减号未定义

标签 java generics

我正在尝试从提供的数组(二维数组)中减去该值。我想通过使用泛型来完成。谁能帮助我的代码出了什么问题。我的意思是我需要延长一些类(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/

相关文章:

generics - 为什么在使用嵌套泛型创建枚举时会出现 "overflowed on"错误?

java - 一般问题

ios - 如何在 Swift 中定义闭包数组?

java - 等待所有 JDA RestActions

java - for循环打印二维数组

java - 无法使用 spring-jdbc NamedParameterJdbcTemplate 以批处理方式存储枚举

c# - 基于具体类型在 Unity 中注册泛型类型

java - 限制对 AppEngine 上的 JRE 库类的访问的目的是什么?

java - 我在将 Firebase 实时数据库中的数据检索到字符串变量中时遇到问题

java - 编写一个名为 Child 的简单接口(interface)(其中没有任何内容),并使用它创建一个只能存储 Boy 和 Girl 实例的 ArrayList