Java利用反射获取object的属性和值代码示例

网友投稿 402 2023-03-05


Java利用反射获取object的属性和值代码示例

在看反射顺便做个笔记,目前知道的反射的Object都是要有对象的也就是实体Bean。

referance:java反射简易教程

import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 反射处理Bean,得到里面的属性值

*

* @author liulinsen

*

*/

public class ReflexObjectUtil {

/**

* 单个对象的所有键值

*

* @param object

* 单个对象

*

* @return Map map 所有 String键 Object值 ex:{pjzyfy=0.00,

* xh=01, zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00,

* czydm=0037, lx=921, zssl=0.00}

*/

public static Map getKeyAndValue(Object obj) {

Map map = new HashMap();

// 得到类对象

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();

}

/*

* String type = f.getType().toString();//得到此属性的类型 if

* (type.endsWith("String")) {

* System.out.println(f.getType()+"\t是String"); f.set(obj,"12") ;

* //给属性设值 }else if(type.endsWith("int") ||

* type.endsWith("Integer")){

* System.out.println(f.getType()+"\t是int"); f.set(obj,12) ; //给属性设值

* }else{ System.out.println(f.getType()+"\t"); }

*/

}

System.out.println("单个对象的所有键值==反射==" + map.toString());

return map;

}

/**

* 单个对象的某个键的值

*

* @param object

* 对象

*

* @param key

* 键

*

* @return Object 键在对象中所对应得值 没有查到时返回空字符串

*/

public static Object getValueByKey(Object obj, String key) {

// 得到类对象

Class userCla = (Class) obj.getClass();

/* 得到类中的所有属性集合 */

Field[] fs = userCla.getDeclaredFields();

for (int i = 0; i < fs.length; i++) {

Field f = fs[i];

f.sethTuhAVUgAccessible(true);

// 设置些属性是可以访问的

try {

if (f.getName().endsWith(key)) {

System.out.println("单个对象的某个键的值==反射==" + f.get(obj));

return f.get(obj);

}

}

catch (IllegalArgumentException e) {

e.printStackTrace();

}

catch (IllegalAccessException e) {

e.printStackTrace();

}

}

// 没有查到时返回空字符串

return "";

}

/**

* 多个(列表)对象的所有键值

*

* @param object

* @return List> 列表中所有对象的所有键值 ex:[{pjzyfy=0.00, xh=01,

* zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00,

* czydm=0037, lx=921, zssl=0.00}, {pjzyfy=0.00, xh=02, zzyl=0.00,

* mc=新生儿产伤发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=13,

* zssl=0.00}, {pjzyfy=0.00, xh=03, zzyl=0.00, mc=阴道分娩产妇产伤发生率,

* pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00},

* {pjzyfy=0.00, xh=04, zzyl=0.75, mc=输血反应发生率, pjypfy=0.00, rs=0,

* pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, {pjzyfy=5186.12,

* xh=05, zzyl=0.00, mc=剖宫产率, pjypfy=1611.05, rs=13, pjzyts=7.15,

* czydm=0037, lx=13, zssl=0.00}]

*/

public stahTuhAVUgtic List> getKeysAndValues(List object) {

List> list = new ArrayList>();

for (Object obj : object) {

Class userCla;

// 得到类对象

userCla = (Class) obj.getClass();

/* 得到类中的所有属性集合 */

Field[] fs = userCla.getDeclaredFields();

Map listChild = new HashMap();

for (int i = 0; i < fs.length; i++) {

Field f = fs[i];

f.setAccessible(true);

// 设置些属性是可以访问的

Object val = new Object();

try {

val = f.get(obj);

// 得到此属性的值

listChild.put(f.getName(), val);

// 设置键值

}

catch (IllegalArgumentException e) {

e.printStackTrace();

}

catch (IllegalAccessException e) {

e.printStackTrace();

}

}

list.add(listChild);

// 将map加入到list集合中

}

System.out.println("多个(列表)对象的所有键值====" + list.toString());

return list;

}

/**

* 多个(列表)对象的某个键的值

*

* @param object

* @param key

* @return List 键在列表中对应的所有值 ex:key为上面方法中的mc字段 那么返回的数据就是: [住院患者压疮发生率,

* 新生儿产伤发生率, 阴道分娩产妇产伤发生率, 输血反应发生率, 剖宫产率]

*/

public static List getValuesByKey(List object, String key) {

List list = new ArrayList();

for (Object obj : 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);

// 设置些属性是可以访问的

try {

if (f.getName().endsWith(key)) {

list.add(f.get(obj));

}

}

catch (IllegalArgumentException e) {

e.printStackTrace();

}

catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

System.out.println("多个(列表)对象的某个键的值列表====" + list.toString());

return list;

}

}

调用:

List o=?Service.getAllList();

//java反射 解析测试

ReflexObjectUtil.getKeyAndValue(o.get(0));

ReflexObjectUtil.getValueByKey(o.get(0), "mc");

ReflexObjectUtil.getKeysAndValues(o);

ReflexObjectUtil.getValuesByKey(o, "mc");

总结

以上就是本文关于Java利用反射获取object的属性和值代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Java反射简易教程

Java反射机制实例代码分享

关于Java反射机制 你需要知道的事情

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么理解api网关(api网关 bff)
下一篇:在线文件管理器提供api(web在线文件管理系统)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~