有没有办法做这样的事情?
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),
};
}
答案 0 :(得分:-1)
尝试一下。
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()