我在尝试投射通用二维数组时遇到错误,任何提示?
public E[][] multiplyMatrix(E[][] matrix1, E[][] matrix2) {
// Check bounds
if (matrix1[0].length != matrix2.length) {
throw new RuntimeException(
"The matrices do not have compatible size");
}
// Create result matrix
E[][] result = (E[][])new Object[matrix1.length][matrix2[0].length];
// Perform multiplication of two matrices
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[0].length; j++) {
result[i][j] = zero();
for (int k = 0; k < matrix1[0].length; k++) {
result[i][j] = plus(result[i][j],
multiply(matrix1[i][k], matrix2[k][j]));
}
}
}
return result;
}
这是我的错误
java.lang.ClassCastException: java.lang.Object; cannot be cast to java.lang.Double;
答案 0 :(得分:0)
(E[][])new Object[matrix1.length][matrix2[0].length]
我猜你某处有这样的事情:
Double[][] result = multiplyMatrix(m1, m2); // m1 & m2 are also Double[][]
所以,如果您认为以下内容是个好主意,那么您必须告诉我:
(Double[][])new Object[n][n]
如果你同意这似乎是一个坏主意,那么你理解为什么你会得到一个例外,除非未经检查的演员模糊了正在发生的事情。
如果您想要使用正确的类型创建数组,则需要使用Arrays.copyOf
或getComponentType
/ Array.newInstance
。但这并没有完全解决问题,因为没有什么能阻止你用不兼容的数组参数调用multiplyMatrix
。试试看我的意思:
multiplyMatrix(new Double[1][1], new Integer[1][1]);
就我个人而言,我建议不要一直尝试数学,因为仿制药不是为它而设计的,它充满了更多的陷阱。或者可以使用现有的库,因为我很确定那里有一些库。