Как получить имя переменной экземпляра из этого экземпляра в Java - PullRequest
0 голосов
/ 25 марта 2019

Есть ли способ сделать что-то подобное?

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 Ответ

0 голосов
/ 25 марта 2019

Попробуйте это.

import java.lang.reflect.Field;

public class T {

public String var = "Some Value"; 
String var2 = "Some Another Value";

public void printFields(Object obj) throws Exception {
    Class<?> objClass = obj.getClass();
    Field[] allFields = objClass.getDeclaredFields(); 
    for(Field field : allFields) {
        String name = field.getName(); // variable name
        Object value = field.get(obj); // OP doesn't need this though
        System.out.println(name + ":" + value.toString());
    }

}

public static void main(String[] args) {
    T ob = new T();
    try {
        ob.printFields(ob);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}

Выход:

var:Some Value

var2:Some Another Value

Полезный ресурс: - https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredFields()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...