用Java中的dynamic名称分配variables

我想在java中分配一组variables,如下所示:

int n1,n2,n3; for(int i=1;i<4;i++) { n<i> = 5; } 

我怎样才能在Java中实现这一点?

这不是你在Java中做的事情。 Java中没有dynamicvariables。 Javavariables必须在源代码(*)中声明。 期。

根据你想要达到什么,你应该使用一个数组,一个List或一个Map ; 例如

 int n[] = new int[3]; for (int i = 0; i < 3; i++) { n[i] = 5; } List<Integer> n = new ArrayList<Integer>(); for (int i = 1; i < 4; i++) { n.add(5); } Map<String, Integer> n = new HashMap<String, Integer>(); for (int i = 1; i < 4; i++) { n.put("n" + i, 5); } 

可以使用reflection来dynamic引用已经在源代码中声明的variables。 但是, 这只适用于类成员(即静态和实例字段)的variables。 它不适用于局部variables。 参见@ fyr的“快速和肮脏”的例子。

然而,在Java中不必要地做这种事情是一个坏主意。 这是效率低下,代码更复杂,并且由于您依赖于运行时检查它更脆弱。

这不是“具有dynamic名称的variables”。 用静态名称dynamic访问variables会更好。


* – 这个陈述有些不准确。 如果使用BCEL或ASM,则可以在字节码文件中“声明”variables。 但不要这样做! 那就是疯狂!

如果你想访问variables某种dynamic,你可以使用reflection。 然而,reflection不适用于局部variables。 它只适用于类属性。

一个粗糙的肮脏的例子是这样的:

 public class T { public Integer n1; public Integer n2; public Integer n3; public void accessAttributes() throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException { for (int i = 1; i < 4; i++) { T.class.getField("n" + i).set(this, 5); } } } 

你需要以各种方式改进这个代码,这只是一个例子。 这也不被认为是好的代码。

你需要的是命名数组。 我想写下面的代码:

 int[] n = new int[4]; for(int i=1;i<4;i++) { n[i] = 5; } 

您应该使用Listarray

 List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); 

要么

 int[] arr = new int[10]; arr[0]=1; arr[1]=2; 

甚至更好

 Map<String, Integer> map = new HashMap<String, Integer>(); map.put("n1", 1); map.put("n2", 2); //conditionally get map.get("n1"); 

Java中的dynamicvariables名称
哪有这回事。

在你的情况下,你可以使用数组:

 int[] n = new int[3]; for() { n[i] = 5; } 

对于更一般的(name, value)对,使用Map<>

试试这个方法:

  HashMap<String, Integer> hashMap = new HashMap(); for (int i=1; i<=3; i++) { hashMap.put("n" + i, 5); } 

你没有。 您可以做的最接近的事情就是使用Google Maps来模拟它,或者定义自己的对象来处理。