#java #reflection
#java #отражение
Вопрос:
Есть ли способ сделать что-то подобное?
public class T {
String var = "Some value";
public void show() {
System.out.println(var.getClass().getName()); // Prints var
}
}
Редактировать
Пример использования: у меня есть класс X
со многими переменными экземпляра, которые будут переданы в качестве аргументов в другую Y
основную точку входа класса. X
Класс имеет этот метод:
protected String[] getAttributesAsCommandLineArguments() {
return new String[] {
String.format("--%s=%s", "state", state),
String.format("--%s=%s", "accountId", accountId),
String.format("--%s=%s", "pageId", pageId),
String.format("--%s=%s", "retroactiveDays", retroactiveDays),
String.format("--%s=%s", "state", state),
String.format("--%s=%s", "task", task),
String.format("--%s=%s", "channel", channel),
};
}
Я не хочу повторять оба имени строки в кавычках для каждой String.format()
строки.
Я хочу что-то вроде этого:
protected String[] getAttributesAsCommandLineArguments() {
return new String[] {
String.format("--%s=%s", state.getDeclaredName(), state),
String.format("--%s=%s", accountId.getDeclaredName(), accountId),
String.format("--%s=%s", pageId.getDeclaredName(), pageId),
String.format("--%s=%s", retroactiveDays.getDeclaredName(), retroactiveDays),
String.format("--%s=%s", state.getDeclaredName(), state),
String.format("--%s=%s", task.getDeclaredName(), task),
String.format("--%s=%s", channel.getDeclaredName(), channel),
};
}
Комментарии:
1. Какой результат вы ожидаете от этого оператора println? Имя переменной? Можете ли вы объяснить вариант использования?
2. Я думаю, что приведенный пример объясняется сам собой, но ладно. Представьте, что у меня есть переменная экземпляра, подобная
var
названной в приведенном выше примереawesomeInstanceVariable
, я хочу получить строку, содержащую имя этойawesomeInstanceVariable
переменной, которая является «awesomeInstanceVariable»3. Я думаю, вы меня неправильно поняли. «Вариант использования» означает — для чего вам нужно получить имя переменной. Какого рода проекту необходимо знать имя переменной в классе? Если мы знаем, мы, возможно, сможем предложить решение лучше, чем просто
println("var")
.4. Обновлен вопрос @RealSkeptic
5. Хорошо, я понял. Ну, вы не можете использовать имя поля в качестве идентификатора для этого. Вы можете использовать отражение и, возможно, использовать аннотации, чтобы отмечать только те поля, которые вас интересуют. Однако я не вижу пользы в том, чтобы не использовать литеральные строки.