Доступ к переменной с именем variablename + number - PullRequest
1 голос
/ 09 ноября 2011

Мне всегда было интересно:

  • Если у меня есть, например, 8 JLabels с именем label1, label2, label3 ...
  • Я получаю сообщение, чтобы показать в одном из нихи целое число от 1 до 8

Есть ли какой-нибудь разумный способ получить доступ к переменной с именем label + number без использования переключателя или группы if-elses?И если да, то он более эффективен, чем метод switch / if-elses?

Я пишу ярлыки для Java, но думаю, что это интересный вопрос для любого классического языка.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

вы можете использовать отражение для него, но он будет страдать от плохой производительности, или вы можете сделать это, используя 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 голос
/ 09 ноября 2011

Вы можете использовать Reflection: http://download.oracle.com/javase/tutorial/reflect/

например,

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

Отражение не очень быстрое, но оно очень гибкое.Для вашего примера вы могли бы , вероятно, получить наилучшую производительность, используя оператор switch.

1 голос
/ 09 ноября 2011

Вы должны поместить метки в массив (или коллекцию ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...