1

我正在创建一个通用类来操作矩阵。但问题是:当我实现加法运算时,我得到一个“二元运算符'+'的操作数类型错误”

它说:

第一种类型:对象第二种类型:T 其中 T 是类型变量:T 扩展在类 Matrix 中声明的对象

有没有办法让它做加法?

这是我的代码:

public class Matrix<T> {
    private T tab[][];
    public Matrix( T tab[][])
    {
       this.tab = (T[][])new Object[tab.length][tab[0].length];
       for(int i = 0; i < tab.length; i++){
            System.arraycopy(tab[i], 0, this.tab[i], 0, tab.length);
        }
    }

    public Matrix(int row, int column)
    {
       this.tab = (T[][])new Object[row][column];
    }

    //other constructors...

    public Matrix addition(Matrix otherMatrix)
    {
        Matrix tmp = new Matrix(otherMatrix.getRowLen(), otherMatrix.getColLen());
        for(int i = 0; i < tab.length; i++){
            for(int j = 0; j < tab[0].length; j++){
                //the line with the error is below
               tmp.setElement(i, j, otherMatrix.getElement(i, j) + tab[i][j]);
            }
        }

        return tmp;
    }

    public int getRowLen(){
        return tab.length;
    }

    public int getColLen(){
        return tab[0].length;
    }

    public void setElement(int i, int j, T value){
        tab[i][j] = value;
    }

    public void setElement( T tab[][])
    {
       this.tab = (T[][])new Object[tab.length][tab[0].length];
       for(int i = 0; i < tab.length; i++){
            System.arraycopy(tab[i], 0, this.tab[i], 0, tab.length);
        }
    }

    public T getElement(int i, int j){
        return tab[i][j];
    }
}

提前致谢 !

4

2 回答 2

1

Java 不支持将+运算符用于除原始数字类型和Strings. 在这里,您不能+在任意对象之间使用运算符。

因为是 raw (untyped) Object,所以左侧有一个。你有一个右手边,因为一般用.otherMatrixMatrixTtabT

您不能在 Java 中重载运算符,因此您不能+为任何T.

您可以通过删除泛型并使用

private int tab[][];

或者

private double tab[][];

取决于你的需要。

于 2013-05-09T16:31:57.893 回答
1

尽管数学运算符不适合泛型类型(即使以 为界Number,请参阅建议的副本),但您可以在创建矩阵时轻松传递数学运算策略。

 public class Matrix<T> {

    private final MathOperations<T> operations;

    public Matrix(T[][] data, MathOperations<T> operations) {
       //...
       this.operations = operations;
    }

        //...
        tmp.setElement(i, j, operations.add(otherMatrix.getElement(i, j), tab[i][j]));
 }

 public interface MathOperations<T> {
     public T add(T operand1, T operand2);
     //... any other methods you need defined
 }

 public class IntegerMathOperations implements MathOperations<Integer> {
     public Integer add(Integer i1, Integer i2) {
         //(assuming non-null operands)
         return i1 + i2;
     }
 }
于 2013-05-09T17:20:06.347 回答