gpt4 book ai didi

Java 泛型和数字

转载 作者:太空狗 更新时间:2023-10-29 22:33:09 24 4
gpt4 key购买 nike

为了看看我是否可以清理我的一些数学代码,主要是矩阵代码,我尝试使用一些 Java 泛型。我有以下方法:

private <T> T[][] zeroMatrix(int row, int col) {
T[][] retVal = (T[][])new Object[row][col];
for(int i = row; i < row; i++) {
for(int j = col; j < col; j++) {
retVal[i][j] = 0;
}
}
return retVal;
}

retVal[i][j] = 0 这行让我头疼。该行的目标是用 0 的 T 表示来初始化数组。我试图用它做各种各样的事情:(T 在类中定义为 T extends Number)

retVal[i][j] = (T)0;
retVal[i][j] = new T(0);

唯一有效的是

retVal[i][j] = (T)new Object(0);

这不是我想要的。

这可能吗?是否有更简单的方法来表示任何类型数字(包括可能的 BigDecimal)的 NxM 矩阵,或者我被卡住了?

最佳答案

<T extends Number> T[][] zeroMatrix(Class<? extends Number> of, int row, int col) {
T[][] matrix = (T[][]) java.lang.reflect.Array.newInstance(of, row, col);
T zero = (T) of.getConstructor(String.class).newInstance("0");
// not handling exception

for (int i = 0; i < row; i++) {
for (int j = 0; j < col;
matrix[i][j] = zero;
}
}

return matrix;
}

用法:

    BigInteger[][] bigIntegerMatrix = zeroMatrix(BigInteger.class, 3, 3);
Integer[][] integerMatrix = zeroMatrix(Integer.class, 3, 3);
Float[][] floatMatrix = zeroMatrix(Float.class, 3, 3);
String[][] error = zeroMatrix(String.class, 3, 3); // <--- compile time error
System.out.println(Arrays.deepToString(bigIntegerMatrix));
System.out.println(Arrays.deepToString(integerMatrix));
System.out.println(Arrays.deepToString(floatMatrix));

编辑

通用矩阵:

public static <T> T[][] fillMatrix(Object fill, int row, int col) {
T[][] matrix = (T[][]) Array.newInstance(fill.getClass(), row, col);

for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
matrix[i][j] = (T) fill;
}
}

return matrix;
}

Integer[][] zeroMatrix = fillMatrix(0, 3, 3); // a zero-filled 3x3 matrix
String[][] stringMatrix = fillMatrix("B", 2, 2); // a B-filled 2x2 matrix

关于Java 泛型和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com