在java中,我有一个bean对象(类型未知),我想把该bean成员的值放入一个HashMap,类成员为键。如果不使用反射,我可以这样做吗?否则,告诉我一个用反射来做的好方法beanObject = {name="raja",age="20"} to haspMapObj = {name="raja",age="20"}
正如人们所说,我试过自省器:谢谢你的回答和建议朋友。
Class myClass =myObj.getClass();
info = Introspector.getBeanInfo(myClass);
for ( PropertyDescriptor pd : info.getPropertyDescriptors() ){
String name = pd.getName();
System.out.println("*************"+name+","+ pd.getValue(name));
}
,但上面只打印名字,值是空的。因为我们只传递类类型而不是对象引用。我们怎么得到这个值呢?
您可以使用Introspector获取bean的所有字段及其值。
我认为你不能不反思。对于反射,你可以这样做:
Map<String, Field> map = new HashMap<String, Field>();
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
map.put(field.getName(), field);
}
如果不通过框架间接使用反射,我看不到任何可能性。
如果你看一下Apache Commons Beanutils,你可能会发现一些有用的方法:
http://commons.apache.org/beanutils/指定:http://commons.apache.org/beanutils/v1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html
致以最亲切的问候!
你可以使用基于反射的自省:http://download.oracle.com/javase/6/docs/api/java/beans/Introspector.html
但是最后你到底想做什么呢?也许有更好的办法……
从PropertyDescriptor中获取值pd:
Object value = pd.getReadMethod().invoke(myObj, new Object[]{});
注意,不久前我写了一个实用程序类,您可能会发现它很有用:
http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/beans/BeanIntrospector.html