Получите интерфейсное постоянное имя с помощью его значения

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

Существует ли способ получить постоянное целое число имени интерфейса с помощью его значения?

KeyPressed(int i) {
    string pressedKeyName = getPressedKey(i);
    System.out.println(pressedKeyName);
}
8
задан Floern 26 January 2017 в 16:11
поделиться

1 ответ

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

  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
21
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: