2014-11-03 137 views
0

我想弄清楚是否有类似的方式在Java中,因为在javascript中使用字符串而不是明确的点符号来获取对象成员变量。访问Java对象的字符串名称的成员变量

对于实施例在JavaScript我可以访问由一个元素成员变量:

someObj["memVarName"] and someObj.memVarName 

那么,有没有我不得不写入特定的方法来做到这一点任何给定的方法是什么?

+0

[Java:我如何通过存储在变量中的名称访问类的字段?](http://stackoverflow.com/questions/2127197/java-how-can-i-access-a- class-field-by-a-name-stored-in-a-variable) – Boann 2014-11-04 14:36:31

回答

1

喜欢的东西

someObj.getClass().getField("memVarName").get(someObj) 

然而,通常,在Java中,当你想使用反射,你试图解决的问题可能是更好的使用地图或接口解决。

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

+1

'Hashtable'是一个遗留集合类。改为使用'HashMap'。 – Jesper 2014-11-03 22:10:02

1

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

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

0

你可以使用BeanUtils(apache项目),虽然不像JavaScript这样的语言整洁,但比使用Reflection API更不痛苦。

谷歌番石榴库还提供了绕着思考API的包装,以允许这种“命名访问”

如果做不到这一点,你被卡住在Java核心的反思与豆的API。

相关问题