当前位置: 首页 > 面试题库 >

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

周洋
2023-03-14
问题内容

很抱歉提出这样的问题,但我确实无法在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()将仅返回由对象的类声明的字段。如果要查找由超类声明的字段,则应遍历对象的所有类(通过重复执行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(…),如果未在类中找到,它将在超类上搜索。



 类似资料:
  • 问题内容: 为简单起见,这是我要执行的操作的简化版本: 我知道如何在PHP中执行此操作: 有什么办法吗? 问题答案: 如果是全局变量,则可以执行以下操作: 关于各种“ eval”解决方案的说明:你应谨慎使用eval,特别是如果要评估的字符串来自可能不受信任的来源-否则,你可能最终会删除磁盘的全部内容或类似内容如果给你一个恶意字符串。 (如果它不是全局的,那么你将需要访问其定义在其中的任何名称空间。

  • 问题内容: 如何通过反射找出方法的字符串名称是什么? 例如给出: 我想获取字符串“ getFoo”,如下所示: 问题答案: 由于方法本身不是对象,因此它们没有直接的属性(就像您希望使用JavaScript之类的一流函数那样)。 您能做的最接近的是致电 是一个对象,您可以使用它调用任何反射方法。 但是,据我所知,一种方法无法识别自己。

  • 问题内容: 假设我们只有 我们如何将属性设置为某个值(例如“ hello world”)?所以我想实现这一点,尽管我们只有字符串中的属性名称: 问题答案:

  • 本文向大家介绍如何在Python中获取变量名称作为字符串?,包括了如何在Python中获取变量名称作为字符串?的使用技巧和注意事项,需要的朋友参考一下 实际上,这不是您在Python中所做的事情,因为变量实际上是对象的名称映射。Python中唯一具有规范名称的对象是模块,函数和类,并且在定义函数或类或导入模块后,当然不能保证此规范名称在任何命名空间中都具有任何含义。这些名称也可以在创建对象之后进行

  • 问题内容: 示例代码: 现在,说我想让用户输入一个字符串: 然后,说出用户输入。我将如何检索命名的变量并对其进行处理?像这样: 我抬头看了一些东西,却没发现太多。我确实找到了对“反射API”的引用,但是对于这一简单任务而言,它似乎太复杂了。 有没有办法做到这一点,如果是的话,那是什么?如果“反射”确实有效并且是唯一的方法,那么我将如何使用它来做到这一点?它的教程页面包含了各种我无法理解的内部内容。

  • 问题内容: 我想获取给定日期字符串的格式。 示例:我有一个类似的字符串,并且该字符串的日期格式为。 在这里,当我将string()传递给将返回format()的方法时,我想找出这种日期格式,然后稍后根据我的require()格式化给定的日期字符串。 谁能告诉我如何实现? 问题答案: