用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来模拟它,或者定义自己的对象来处理。