访问名为variablename + number的变量

时间:2011-11-09 09:04:24

标签: java variables

我一直想知道:

  • 如果我有一个名为label1,label2,label3 ......
  • 的8个JLabel
  • 我收到一条要在其中一个中显示的消息和一个从1到8的整数

是否有任何智能方法可以在不使用开关或一堆if-elses的情况下访问名为label + number的变量?如果是这样,它是否比switch / if-elses方法更有效?

我正在为Java标记,但我认为这对任何经典语言来说都是一个有趣的问题。

3 个答案:

答案 0 :(得分:2)

你可以使用reflection,但它会受到糟糕表现的影响,或者你可以使用预先计算好你的对象的Map<Integer,JLabel>来做这件事。

对于更一般的情况,反思可能就是你要找的东西。

反射用法的简单例子:

public class TestSomething {
    public int elem1 = 1;
    public int elem2 = 2;
    public int elem3 = 3;
    public int elem4 = 4;
    public static void main(String[] str) throws NoSuchFieldException,IllegalAccessException {
        TestSomething test = new TestSomething();
        int num = 3;
        Field field = test.getClass().getField("elem" + num);
        System.out.println(field.get(test));
    }
}

答案 1 :(得分:1)

您应该将标签放在array(或collection)中。

答案 2 :(得分:1)

您可以使用反射:http://download.oracle.com/javase/tutorial/reflect/

e.g。

int i = 0;
Field f = this.getClass().getDeclaredField("prefix" + i);
f.setInt(this, 42);

反思并不是特别快,但它非常灵活。对于您的示例,您可能使用switch语句获得最佳性能。