java - 在 Java 中,如何获取给定字符串的属性及其名称?

标签 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 inspect
Class<?> c = o.getClass();

Field f = c.getDeclaredField("myColor");
f.setAccessible(true);

String valueOfMyColor = (String) f.get(o);

请注意,getDeclaredField() 只会返回对象类声明的字段。如果您正在寻找由父类(super class)声明的字段,您应该遍历该对象的所有类(通过重复执行 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(...) 如果在类中找不到,它将在父类(super class)上搜索。

关于java - 在 Java 中,如何获取给定字符串的属性及其名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2043471/

相关文章:

java - 计算 epsilon 闭包的最快方法是什么?

java - 为什么此设置 Activity 的 onSharedPreferenceChanged 方法为空?

java - 设置 Cassandra Liquibase

java - 如何在 gradle 测试中启用有用的 NullPointerExceptions

java - HDIV 验证更改字段的一般错误消息

java - 隐藏滑动抽屉 Handlebars

Java - 使用 runtime.getRuntime().exec 运行 Excel

java - 比较hbase中的2个表,并使用TableMapReduceUtil将摘要写入第三个表

java - Hibernate初学者疑惑

java - Java 库设计者明确要求 TreeMap 是红/黑树有什么原因吗?