Существуют некоторые «особые случаи», когда вы можете обойти это (о чем говорят другие), но самый важный вопрос: зачем вам это делать (вывод имени переменной)?
Исходя из моего опыта, 99,9% подобных вопросов (как печатать имя переменной? Как получить переменную зависит от ввода имени переменной, введенного пользователем? И т. Д.) Фактически задаются начинающим программистом, и они просто сделали неверные предположенияи конструкции.Цель, которую они пытаются достичь обычно, может быть достигнута с помощью более подходящего дизайна.
Редактировать
Честно говоря, я до сих пор не думаю,то, что вы пытаетесь сделать, это путь, но, по крайней мере, я думаю, что следующий ответ является работоспособным:
Это более или менее комбинация предыдущего ответа:
(Haven 'не пытайтесь скомпилировать, но, по крайней мере, это даст вам представление)
class Constants {
public static final int FOO = 123;
public static final int BAR = 456;
private static Map<Integer, String> constantNames = null;
public static String getConstantName(int constVal) {
if (constantNames == null) {
Map<Integer, String> cNames = new HashMap<Integer, String>()
for (Field field : MyClass.class.getDeclaredFields()){
if ((field.getModifiers() & (Modifier.FINAL | Modifier.STATIC)) != 0) {
&& int.class == field.getType()){
// only record final static int fields
cNames.put((Integer)field.get(null), field.getName());
}
}
constNames = cNames;
}
return constantNames.get(constVal);
}
}
при условии, что вы хотите получить постоянное имя, просто выполните:
Constants.getConstantName(123); // return "FOO"