【问题标题】:Setting values of variables with an array/loop in java在java中使用数组/循环设置变量的值
【发布时间】:2011-01-11 21:16:34
【问题描述】:

如何使用循环设置变量的值? 例如:

String cur[]= {"A","B"};
String strA,strB;
for(int i =0;i < cur.length;i++) {
  str+i = "Blah";
}

“str+i”部分应该包含什么内容,以便将 strA 和 strB 设置为“Blah”?

谢谢

【问题讨论】:

    标签: java arrays variables loops


    【解决方案1】:

    你不这样做。相反,您创建了某种类型的集合。例如,您可以使用地图:

    String[] cur = { "A", "B" };
    Map<String, String> map = new HashMap<String, String>;
    for (String name : cur)
        map.put(name, "Blah");
    }
    

    除非您使用反射(这对局部变量没有帮助),否则您无法“计算”要使用的变量名称...而且您不应该将反射用于某些事情像这样。

    假设您想通过字符串名称访问值。如果您可以使用连续的整数范围(从 0 开始),那么数组或 List&lt;T&gt; 可能更合适。这取决于你想做什么。

    【讨论】:

      【解决方案2】:

      没有简单的方法可以完全按照您的意愿行事。但是,有一个简单的替代方案:不要单独命名您的字符串,只需使用单个数组。

      String[] cur = new String[2];
      for (int i = 0; i < cur.length; ++i) {
          cur[i] = "Blah";
      }
      

      如果您必须通过名称而不是索引访问这些字符串,请考虑创建一个Map&lt;String, String&gt;

      【讨论】:

      • 我应该更具体。我想用循环设置 JLabels 和 JTextFields 的文本。每个标签命名为 lblA、lblB、txtA 等。所以 if(x = i){ lbl+i.setText("something");} 现在我不得不复制粘贴一堆 if 语句,并手动替换“A”部分。
      • 标签需要命名为 lblA、lblB 等是否有充分的理由?考虑一下这些名称是否必要,或者是否可以使用数组。
      【解决方案3】:

      你不能。你可能不应该。

      严格来说,你应该使用 java.lang.reflect 类。它允许您使用我们的 javascript 和/或 ruby​​ 等语言进行某种动态成员访问。但在这种情况下似乎有点过分了。

      另一个更有用的解决方案是什么先生。乔恩·斯基特提议。根据您的实际需要,它可能会起作用。

      【讨论】:

      • @dave 这是真的 :)。我添加了一些说明。
      【解决方案4】:

      你可以做类似的事情,虽然我不知道你为什么要这样做:

      import java.lang.reflect.Field; 
      
      public class Test { 
          static public String strA, strB; 
      
          public static void main(String args[]) throws Exception { 
              String cur[]= {"A","B"}; 
      
              for(int i =0;i < cur.length;i++) { 
                  Field field = Test.class.getField("str" + cur[i]); 
                  field.set(null, "Blah"); 
              } 
              System.out.println(strA); 
              System.out.println(strB); 
          } 
      } 
      

      【讨论】:

      • 你可以这样做......但你不应该这样做。这种东西比非反射代码慢几个数量级,也更复杂更脆弱,
      • 这取决于问题的目的。分配动态属性列表有很多正当理由,例如从框架不知道子类型的配置文件配置插件样式类。
      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      相关资源
      最近更新 更多