有没有办法在对象名中使用变量?

时间:2012-09-26 06:57:13

标签: java syntax

假设我们有一个复选框:

JCheckBox lang_1 = new JCheckBox("English");

此外,我们有一个绑定到ActionListener的变量,因此在ActionEvent发生时它会发生变化。这是ActionEvent中的变量:

(String) abbr = JComboBox<ComboItem> comboBox.getSelectedIndex().toString();

现在,我 abbr 等于 1 所以我想lang_1.setEnabled(true);

有没有办法将“lang_”与 abbr 混合使用,因为我会使用lang_1?

(在jQuery中你可以这样做:$("lang_"+abbr).doSomethingFunction();

2 个答案:

答案 0 :(得分:4)

最简单的方法是将JCheckBox放入arraylist并用它们的索引调用它们:

List<JCheckBox> boxes = new ArrayList<JCheckBox> ();
boxes.add(new JCheckBox("English"));
// populate the list with the other check boxes

String abbr = JComboBox<ComboItem> comboBox.getSelectedIndex().toString();
int index = Integer.parseInt(abbr);
boxes.get(index).setEnabled(true);

您需要在边界,数字解析等上添加相关的错误处理代码。

答案 1 :(得分:2)

是的,您可以使用反射来执行此操作。

以下示例假设您将代码与具有组合框作为字段的类相同。

  this.getClass().getField("lang_" + yourIndex).
     getMethod("setEnabled", new Class<?>[]{ boolean.class}).
     invoke(
         this.getClass().getField("lang_" + yourIndex).get(this), 
         new Object[] { true }
     );

我必须承认它看起来很丑:)。

assylias的解决方案更加清晰,自我解释和“语法”,后者始终是在静态类型语言中处理事物的好方法。