在Java中,如何获取给定字符串名称的属性?
很抱歉提出这样的问题,但我确实无法在Google中找到答案。假设我有一个课程,private String myColor
并且有一个字符串“
myColor”。现在,我想操纵myColor
属性。我怎样才能做到这一点?
对不起,一个不清楚的问题,我想最好的方法是解释我需要什么。我有一个Swing表单,想在加载gui时使用首选项api设置字段的值。因此,我可以读取所有字段,然后outputDirectoryTextField.setText(valueFromPrefsAPI);
对每个字段进行处理,但这似乎是不需要的编码,因此我想使用带有字段名称的数组(哈希?)并遍历它们,如下所示:
String[] myTextInputs = {"thisInput", "thatInput"};for (String inputName : myTextInputs) {
String value = prefs.get(inputName, "");
/* some code I'm seeking to find out*/.setText(value);
}
回答:
您可以使用反射来检查任何对象的内容,如下所示:
Object o = ...; // The object you want to inspectClass<?> c = o.getClass();
Field f = c.getDeclaredField("myColor");
f.setAccessible(true);
String valueOfMyColor = (String) f.get(o);
请注意,getDeclaredField()将仅返回由对象的类声明的字段。如果要查找由超类声明的字段,则应遍历对象的所有类(通过重复执行c =
c.getSuperclass()直到c == null)
如果要更改字段的值,可以使用set方法:
f.set(o, "some-new-value-for-field-f-in-o")
其他详细信息:https
:
//docs.oracle.com/javase/6/docs/api/java/lang/reflect/Field.html
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getField(java.lang.String)
您可以使用getField(…),如果未在类中找到,它将在超类上搜索。
以上是 在Java中,如何获取给定字符串名称的属性? 的全部内容, 来源链接: utcz.com/qa/402929.html