在Java中,如何获取给出带有名称的字符串的属性?

我很抱歉提出这类问题,但我真的找不到谷歌的答案。 所以说我有一个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); } 

您可以使用reflection来检查任何对象的内容,如下所示:

 Object o = ...; // The object you want to inspect Class 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") 

其他详细信息: http : //java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html


https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getField(java.lang.String)

您可以使用getField(…),如果在类中找不到,将搜索超类。

根据编辑,我的建议是使用Map将首选项名称的地图包含到适当的文本字段或其他文本组件中。 只需在构建用户界面时构建地图。

 Map guiFields = new HashMap(); 

然后你可以让代码做

 guiFields.get(inputName).setText(value); 

如果我正确理解你的问题……你应该创建公共getter和setter:

 public void setMyColor(String color) { this.myColor = color; } public String getMyColor { return this.myColor; } 

这取决于你想要做到这一点。 在课堂上你只需要它,例如:

 myColor = "blah blah"; 

从外面看,你需要有一些公共方法,如其他post所示。 在所有情况下,如果你的环境是multithreading的,你必须要小心。 类级变量不是线程安全的。

您必须创建一个“mutator”来修改私有成员变量。

 class example{ private string myColor; public void changeColor(string newColor){ myColor = newColor; } }