不同数字之间的通用矩阵类转换

时间:2017-02-10 03:46:17

标签: java generics

所以我必须创建一个Matrix类,它通常将数组中的不同对象组合在一起。我知道我可以通过检查类型来做到这一点,但我想找到一个更好的方法。这必须适用于双打,整数,浮点数,短裤,长条,弦乐等。这是我目前的代码:

public class Matrix<E>{



private E mat2[];
private static final int SIZE = 4;



public Matrix(){
    mat2 = (E[]) new Object[SIZE];
}

public Matrix(E a1, E a2, E b1, E b2){
    mat2 = (E[]) new Object[SIZE];
    mat2[0] = a1;
    mat2[1] = a2;
    mat2[2] = b1;
    mat2[3] = b2;
}


public void add(Matrix<E> info){
    if(mat2[0] instanceof Number){
        for(int i = 0; i < SIZE; i++){
            Double tmp = ((Double)info.getElement(i)).doubleValue();
            Double other = tmp + ((Double)mat2[i]).doubleValue();
            mat2[i] = (E) other;
        }
    }
}

public E getElement(int index){ return mat2[index];}


public String toString(){
    String info = "[";
    for(int i = 0; i < SIZE; i++){
        info += "\t" + mat2[i];
        info += (i % 2 == 1) ? "\t]\n[" : "";
    }
    return info.substring(0, info.length() - 1);
}



public static void main(String... arg){

    Matrix<Integer> matInt = new Matrix<Integer>(new Integer(1), new Integer(0), new Integer(0), new Integer(1));
    Matrix<Integer> matInt2 = new Matrix<Integer>(new Integer(1), new Integer(0), new Integer(0), new Integer(1));
    System.out.println(matInt);


    Matrix<String> matStr = new Matrix<String>("One", "Two", "Three", "Four");
    System.out.println(matStr);

    matInt.add(matInt2);
    System.out.println(matInt);



}

}

现在让我提请你注意这个方法:

public void add(Matrix<E> info){
    if(mat2[0] instanceof Number){
        for(int i = 0; i < SIZE; i++){
            Double tmp = ((Double)info.getElement(i)).doubleValue();
            Double other = tmp + ((Double)mat2[i]).doubleValue();
            mat2[i] = (E) other;
        }
    }
}

我现在假设Double,所以如果它是一个浮点数,它将保持小数,但如果不是,我希望切断它。我可以通过以下方式轻松完成我需要的工作:

public void add(Matrix<E> info){
    if(mat2[0] instanceof Number){
        for(int i = 0; i < SIZE; i++){
            if(type == Double){
            Double tmp ((Double)info.getElement(i)).doubleValue();
            Double other = tmp + ((Double)mat2[i]).doubleValue();
            mat2[i] = (E) other;
            }
            if(type == Integer){
                //do integer instead
            }
            if(type == String){
                //do String instead
            }
        }
    }
}

但是我想知道我是否可以在没有所有检查的情况下找到更多的通用战争。该程序用于作业,所以我必须使用泛型。我们的想法是能够在数组'mat2'中添加和相乘类型。所以如果我有Integer类型,他们需要加在一起。如果我有字符串,他们也需要加在一起。

0 个答案:

没有答案