Получить имя константы интерфейса, используя ее значение - PullRequest
8 голосов
/ 08 апреля 2010

Это может не иметь большого прецедента в проектах, но я просто пробовал проект типа POC, в котором я получаю код ключа и, используя его значение, я хочу напечатать имя ключа на экране.Я хочу избавиться от написания сценариев переключения, поэтому подумал о том, чтобы перейти к рефлексии.

Есть ли способ получить постоянное целое число имени интерфейса, используя его значение?

KeyPressed(int i) {
    string pressedKeyName = getPressedKey(i);
    System.out.println(pressedKeyName);
}

1 Ответ

21 голосов
/ 08 апреля 2010

Я могу придумать два лучших решения, чем использование отражения.

  1. Любая приличная среда IDE автоматически заполнит операторы switch для вас. Я использую IntelliJ, и он делает это (вы просто нажимаете Ctrl-Enter). Я уверен, что в Eclipse / Netbeans есть нечто подобное; и

  2. Перечисления делают выбор констант намного лучше, чем публичные статические примитивы. Дополнительным преимуществом является то, что они избавят вас от этой проблемы.

Но чтобы узнать, что вы хотите, с помощью отражения, предположив:

interface Foo {
  public static final int CONST_1 = 1;
  public static final int CONST_2 = 3;
  public static final int CONST_3 = 5;
}

Пробег:

public static void main(String args[]) {
  Class<Foo> c = Foo.class;
  for (Field f : c.getDeclaredFields()) {
    int mod = f.getModifiers();
    if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && Modifier.isFinal(mod)) {
      try {
        System.out.printf("%s = %d%n", f.getName(), f.get(null));
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      }
    }
  }
}

Выход:

CONST_1 = 1
CONST_2 = 3
CONST_3 = 5
...