如何将字符串变量值转换为变量名称

时间:2015-05-20 09:02:15

标签: java string variables

大约有10种不同类型的不同尺寸的2D阵列。例如:

int arr1[][];
float arr2[][];
long arr3[][];
String arr4[][];

在程序执行期间,需要以不同的间隔打印每个阵列。有一个定义print2DArray()的方法,它将2D数组作为参数计算行数和列数并打印数组。但由于数组具有不同的数据类型,因此需要为每种数据类型编写覆盖方法。

我们可以创建一个变量:String arrName; 并将其传递给方法print2DArray()并解码String以获取要打印的数组。 例如:

如果方法被调用为:print2DArray(arr2);

和方法定义为:

void print2DArray(String arrName){
    **Some code to identify which array is reffered by arrName to print**
}

2 个答案:

答案 0 :(得分:1)

为此需要使用java reflection api。

代码有点像这样。

class CustomClass {
    int[][] arr1 = new int[][] { { 1, 2, 3, 4 }, { 5, 6, 8, 7 } };

    public static void main(String[] args) {
        CustomClass c = new CustomClass();

        Field[] f = c.getClass().getDeclaredFields();

        for (int i = 0; i < f.length; i++) {
            if (f[i].getName().equals("arr1")) {
                System.out.println(c.arr1[0][0]); // your own logic
            } else if (f[i].getName().equals("arr2")) {
                System.out.println(c.arr2[0][0]); // your own logic
            } else if (f[i].getName().equals("arr3")) {
                System.out.println(c.arr3[0][0]); // your own logic
            } else if (f[i].getName().equals("arr4")) {
                System.out.println(c.arr4[0][0]); // your own logic
            }
        }
    }
}

答案 1 :(得分:0)

我认为你不能原生那样做。虽然有一些简单的解决方法,我选择的是创建一个Map,其中包含与一个键作为数组名称链接的所有数组。这样,在你的print2DArray函数中,你只需要迭代你的地图并找到具有正确键的数组(你在函数中作为参数提供的那个)。

你的地图看起来像这样{{arr1“,arr1},{”arr2“,arr2}等......这显然会迫使你通过在地图中添加它来跟踪每个新创建的数组(反正不是很昂贵)