Как получить имя переменной экземпляра из этого экземпляра в Java

#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. Хорошо, я понял. Ну, вы не можете использовать имя поля в качестве идентификатора для этого. Вы можете использовать отражение и, возможно, использовать аннотации, чтобы отмечать только те поля, которые вас интересуют. Однако я не вижу пользы в том, чтобы не использовать литеральные строки.