使用Java传递部分变量名来获取变量值

使用Java传递部分变量名来获取变量值,java,Java,我声明了10个变量,它们的末尾有索引 var_1 = 212; var_2 = 343; var_3 = 122221; var_4 = 45; var_5 = 11; var_6 = 98; var_7 = 323; var_8 = 32; var_9 = 45; var_10 = 45; 我想获取索引(var_5)或任何索引的值。如何使用Java动态地实现这一点。 我想通过索引5,它应该返回11。< p>假设数组不能解决你的问题(或者当代码不只是一个数字时,代码 map 的实例),并且进

我声明了10个变量,它们的末尾有索引

var_1 = 212; 
var_2 = 343;
var_3 = 122221;
var_4 = 45;
var_5 = 11;
var_6 = 98;
var_7 = 323;
var_8 = 32;
var_9 = 45;
var_10 = 45;
我想获取索引(var_5)或任何索引的值。如何使用Java动态地实现这一点。
我想通过索引5,它应该返回11。

< p>假设数组不能解决你的问题(或者当代码不只是一个数字时,代码<> map 的实例),并且进一步假设<>代码> VARY**/COD>变量实际上是类成员,你可以考虑使用反射:

var field = getClass().getDeclaredField( String.format( "var_%d", index ) );
var value = ((Integer) field.get( this )).intValue();
Field field = getClass().getDeclaredField("var_" + index);
Object fieldValue = field.get(this);
int intVlaue = ((Integer)fieldValue).intValue;
当然,我省略了所有必需的错误处理


但是,如果您的变量是局部变量,那么纯Java不提供任何方法来以您描述的方式获取值。也许您可以编写一些JNI代码或手工编写一些字节码来完成这项工作,但在我看来,这不再是Java。

您真正想做的是什么?那就是,你为什么需要这个

回答你的问题:视情况而定

如果变量是类成员,则通过反射获取其值:

var field = getClass().getDeclaredField( String.format( "var_%d", index ) );
var value = ((Integer) field.get( this )).intValue();
Field field = getClass().getDeclaredField("var_" + index);
Object fieldValue = field.get(this);
int intVlaue = ((Integer)fieldValue).intValue;
如果变量是局部变量,则不能以这种方式读取它们,因为类文件中不再存在区域设置变量的名称

您可能真正需要的是一个数组:

int[] vars = new int[10] { 212, 343, ... };

int value = vars[index - 1]; // Arrays are 0-based.
或者,如果只有几个索引的值,或者索引不是整数,则映射:

Map<Integer, Integer> vars = new HashMap<>();
vars.put(1, 212);
vars.put(2, 343);
...

int value = vars.get(index);
Map vars=newhashmap();
变量put(1212);
变量put(2343);
...
int value=vars.get(索引);

这可以通过Java中的数组轻松实现

示例代码片段

int[] array = new int[]{ 212,343,122221,45,11,98,323,32,45,45};
int fetchIndex = 5;
if(fetchIndex >0){
System.out.println(arr[fetchIndex-1] );//Since the array indexes are starting from 0 you need to always decrement the array index value you are trying to fetch by one
}


这就是阵列的用途。您可以使用
地图
。并通过一个键提取一个值请解释@AndyTurner@AndyTurner这是一个更大问题的小代表。索引只是为了便于理解而输入的表示形式。不要急于批评。@AnmolParida不要急于假设我在批评。如果这是一个更大问题的一部分,您需要解释这是什么:对于您所编写的内容,数组是您所需要的语言特性。