我有一个方法,aModify(),它接受两个对象引用,a1和a2,以及两个String值,dim1和dim2。
public static Object aModify(Object a1, String dim1, Object a2, String dim2);
a1和a2将作为数组传入,dim1和dim2将作为数组维度传入(即dim1 =" 0",dim2 =" 0 0")。
此方法背后的目标是在dim2处获取数组a2并将在那里找到的值复制到dim1处的a1。
我已成功将两个数组复制到新实例中进行操作,但我真的很困惑如何将字符串值dim1和dim2转换为数组维度,然后使用这些维度复制值。
到目前为止,这就是我对该方法的看法。
Object copy1 = Array.newInstance(a1.getClass().getComponentType(), Array.getLength(a1));
Object copy2 = Array.newInstance(a2.getClass().getComponentType(), Array.getLength(a2));
copy1 = MyUtility.aClone(a1);
copy2 = MyUtility.aClone(a2);
aClone()是我编写的一种方法,它返回传递给方法的任何数组的副本。
阵列a1和a2也有不同的尺寸。数组a1是一个三维数组,其中a2是一个四维数组。
答案 0 :(得分:0)
我不确定为什么你的方法不直接将参数作为int
,但如果你只是想将字符串"0"
转换为int
,你可以使用Integer.parseInt()
。
如果要将字符串"0 0"
转换为两个单独的整数,可以对结果数组中的每个元素使用String.split()
然后Integer.parseInt()
。
根据您对目标的描述,您可能想要这样的内容吗?
int t_dim1 = Integer.parseInt(dim1);
String[] twodims = dim1.split(" ");
int t_dim2_1 = Integer.parseInt(twodims[0]);
int t_dim2_2 = Integer.parseInt(twodims[1]);
更新:看来OP想要处理任意数量的维度。为此,我们需要更聪明一些。首先,我们编写一个辅助函数。
int[] parseAndConvert(String dims) {
String[] dimArray = dims.split(" ");
int[] retVal = new int[dimArray.length];
for (int i = 0; i < retVal.length; i++)
retVal[i] = Integer.parseInt(dimArray[i]);
return retVal;
}
然后,在aModify
内,我们需要做这样的事情来找到元素并设置它。请注意,这是未经测试的,但它应该让你非常接近。
public static Object aModify(Object a1, String dim1, Object a2, String dim2) {
int[] dims1 = parseAndConvert(dim1);
int[] dims2 = parseAndConvert(dim2);
// Find the element to copy.
Object copyMe = a1;
for (int i = 0; i < dims1.length; i++)
copyMe = java.lang.reflect.Array.get(copyMe, dims1[i]);
// Find the nested array holding the object we want to overwrite
Object target = a2;
for (int i = 0; i < dims2.length - 1; i++)
target = java.lang.reflect.Array.get(target, dims2[i]);
Array.set(target, dims2[dims2.length - 1], copyMe);
}