#java #interface
Вопрос:
Допустим, у меня следующий интерфейс :
public interface NUMS { public static final int ZERO = 0; public static final int ONE = 1; public static final int TWO = 2; }
Тогда у меня есть функция, которая возвращает значение int в диапазоне 0-2. Есть ли какая-либо возможность получить имя участника, которое представляет номер в интерфейсе?
экс:
функции возвращают 1, я хочу сопоставить его обратно с ОДНИМ, не используя карту/массив.
Спасибо!
Комментарии:
1. почему бы не использовать перечисление для этой цели?
2. Нет, это невозможно, кроме как использовать отражение или вручную сопоставлять все параметры.
3. Почему бы не использовать фактическое перечисление?
Ответ №1:
Технически, есть, используя отражение:
String getConstantName(int value) { // use reflection to check all fields of NUMS for (Field f : NUMS.class.getFields()) { try { if (f.getInt(null) == value) { return f.getName(); } } catch (IllegalAccessException e) { // ignore } } return ""; }
Но это только в образовательных целях, пожалуйста, не используйте подобные подходы в реальном коде. Как предлагали другие люди, просто используйте an enum
.
Комментарии:
1. Спасибо! Я бы определенно использовал Enum, если бы мог, но я просто использую интерфейс, который написал кто-то другой, не могу его изменить.
2. @omrib40 затем, по крайней мере, кэширует результаты доступа к отражению в каком-либо одноэлементном строковом массиве или карте.