我一直想知道:
是否有任何智能方法可以在不使用开关或一堆if-elses的情况下访问名为label + number的变量?如果是这样,它是否比switch / if-elses方法更有效?
我正在为Java标记,但我认为这对任何经典语言来说都是一个有趣的问题。
答案 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语句获得最佳性能。