使用String名称访问Java Object的成员变量

时间:2014-11-03 21:42:34

标签: java javascript member

我试图弄清楚java中是否存在类似的方式,因为在javascript中使用字符串而不是使用显式点表示法来获取对象成员变量。

对于javascript中的示例,我可以通过以下方式访问元素成员变量:

someObj["memVarName"] and someObj.memVarName 

如果没有我必须编写一个特定的方法来执行此操作,有没有任何给定的方法?

4 个答案:

答案 0 :(得分:1)

这样的东西
someObj.getClass().getField("memVarName").get(someObj)

但是,通常情况下,在Java中,当您想要使用反射时,您尝试解决的问题可能更好地使用Map或接口来解决。

答案 1 :(得分:1)

语法上 - 没有。 Java并不像JavaScript那样松散地输入,开发人员在前者的对象字段上操作的自由度与后者通常做的一样多。

然而,你可以深入了解Reflection API并且 - 知道特别感兴趣的getter / setter的名字 - 你可能想看看How to define dynamic setter and getter using reflection?,但是你应该在第一眼看到它 - 这不值得麻烦。

答案 2 :(得分:0)

哈希表对象允许类似的功能。

此示例创建数字哈希​​表。它使用数字的名称作为键:

Hashtable<String, Integer> numbers
 = new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

要检索号码,请使用以下代码:

Integer n = numbers.get("two");
if (n != null) {
  System.out.println("two = " + n);
 }

取自http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html

答案 3 :(得分:0)

你可以使用BeanUtils(一个apache项目),虽然不像JavaScript那样整洁,但它比使用Reflection API要痛苦得多。

Googles Guava库还提供了一个围绕Reflections API的包装器,以允许这种&#34;命名访问&#34;

如果你不熟悉核心Java中的Reflection和Bean API。