【问题标题】:Working with Generic arrays [duplicate]使用通用数组 [重复]
【发布时间】:2014-02-08 22:30:36
【问题描述】:

美好的一天。最近几个月我一直在学习java。所以我创建了一个通用数组如下。

public class Implementation<T> implements IMatrix<T>{

    private T[][] genMatrix;
    private Integer numberRows;
    private Integer NumberCols;
    public Implementation(){
        generateMatrix();
        for(int i = 0;i< numberRows;i++)
        {
           for(int j =0;j< numberCols;j++)
           {

              JOptionPane.showInputDialog("Enter value for row " + (i+1) + " and for column " + (j+1)))

            }
        }
          multiplyScalar(5);

    }
     //generate the array
    public void generateMatrix(){
        String rowString = JOptionPane.showInputDialog("Enter the number of rows!");
        numberRows = Integer.parseInt(rowString);
        String colString = JOptionPane.showInputDialog("Enter the number of cols!");
        numberCols = Integer.parseInt(colString);

        final Object[][] arrayO = (T[][])new Object[numberRows][numberCols];
        genMatrix = (T[][])arrayO;
     }
     //writeElements to the array;
     public void writeElem(int x, int y, T value){

          genMatrix[x][y] = value;
     }
     //now that those members are done I have created a method to access the data
     public T getElem(Integer i, Integer j){
          return (T)genMatrix[i][j];
     }

这就是我现在的问题所在。我已经制作了这个二维数组。我想将此数组中的每个值乘以Integer c。我尝试了以下方法,但都失败了。

 public IMatrix<T> multiplyScalar(Integer c) throws MatrixException {
    // TODO Auto-generated method stub


    for(int i = 0; i< numberRows; i++)
    {
        for(int j=0;j<numberCols;j++)
        {
            /**
                                 THIS IS THE POINT AT WHICH IT CRASHES
                             */
            System.out.println(((Integer)(getElement(i, j)) * c));


        }
    }

    return null;
} 
}

程序由于 ClassCastException 而崩溃。我已经尝试了我所知道的一切来让它发挥作用。我不能将二维数组与整数相乘。请帮忙。这使用了一个具有更多无关功能的接口。请注意,由于我无法上传原始代码,此代码很可能会崩溃。

【问题讨论】:

  • 运行程序时是T 还是Integer?如果不是,演员就无法工作......
  • 这里解释得很好。 stackoverflow.com/questions/10468853/…
  • @assylias no T 不是整数。我怎样才能得到它一个整数
  • @Jonathan 您的代码允许T 是任何东西,例如文件。将文件乘以数字没有意义。因此,您需要对T 施加更多限制。
  • 如果您不需要泛型,请不要使用它们!为什么在您总是期望特定类型的地方使用未知类型?

标签: java generics multidimensional-array


【解决方案1】:

问题在于 Java 不支持运算符多态性。您需要 T 来扩展 Number,然后使用方法调用。它比人们可能喜欢的要冗长一些。它在这里解释得很好:

Predefining multiplication for generics in java

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2016-05-18
    • 2021-01-13
    • 2017-05-07
    • 2022-10-01
    • 2012-05-27
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多