import java.awt.image.BufferedImage;
import java.io.File;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
/**
* 使用java中的反射获得object对象的属性值
* 返回map对象
* ***/
public class getMapFromObject {
public static void main(String[] args) {
Object result = getImage(); //此处的result为从别的地方获取到的object,里面有一个字段为image
Map<String, Object> map = getKeyAndValue(result); //如果知道result的具体类,可以强转,如果不知道,则用反射获取
if(map.get("image")!=null) {
BufferedImage bi = (BufferedImage)map.get("image");
System.out.println(bi.getData());
try {
ImageIO.write(bi,"png",new File("D:\\test.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static Map<String, Object> getKeyAndValue(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
// 得到类对象
Class userCla = (Class) obj.getClass();
/* 得到类中的所有属性集合 */
Field[] fs = userCla.getDeclaredFields();
for(int i = 0; i < fs.length; i++){
Field f = fs[i];
f.setAccessible(true); // 设置些属性是可以访问的
Object val = new Object();
try {
val = f.get(obj);
// 得到此属性的值
map.put(f.getName(), val);// 设置键值
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
System.out.println("单个对象的所有键值==反射==" + map.toString());
return map;
}
}