java 反射取值
2022/1/15 20:03:49
本文主要是介绍java 反射取值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制
反射取值一般有两种方式
一 通过属性取值赋值
/** * 属性取值 * @param t 实例 * @param field 取值字段 * @return */ public String getFieldValueByClass(T t, String field) { Class<?> aClass = t.getClass(); try { Field f = aClass.getDeclaredField(field); f.setAccessible(true); return (String) f.get(t); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return ""; } /** * 属性赋值 * @param t 实例 * @param field 赋值的字段 * @param value 赋的值 * @return */ public String setFieldValueByClass(T t,String field,String value) { Class<?> aClass = t.getClass(); Field f = null; try { f = aClass.getDeclaredField(field); f.setAccessible(true); f.set(t, value); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return ""; }
二 通过方法取值赋值
案列是针对属性的set,get方法,如果是自定义方法,字段参数直接传方法名,去掉手动拼接setXxx,getXxx那一块代码即可,原理不变。
/** * 反射取值 * @param t 实例对象 * @param field 取值字段 * @return */ public String getMethodValueByClass(T t,String field) { //将字段首字母大写并取出 x > X String firstUpper = String.valueOf(field.charAt(0)).toUpperCase(); //利用StringBuilder 特有的 replace 方法转换将 xxx > Xxx StringBuilder sb = new StringBuilder(field); sb.replace(0,1,firstUpper); //拼接新的字段 getXxx field = "get"+sb.toString(); try { //取值 Class clazz = t.getClass(); return clazz.getMethod(field).invoke(t).toString(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return ""; } /** * 方法赋值 * @param t 实例对象 * @param field 字段 * @param value 赋的值 * @return */ public String setMethodValueByClass(T t, String field, String value) { String s1 = String.valueOf(field.charAt(0)).toUpperCase(); StringBuilder sb = new StringBuilder(field); sb.replace(0, 1, s1); field = "set" + sb.toString(); try { Class clazz = t.getClass(); //设置方法参数String, 可设置多个参数,clazz.getMethod(field, String.class,Integer.class....) 等对应你属性里面形参即可 Method method = clazz.getMethod(field, String.class); //填充值,对应以上参数个数即可 return method.invoke(t, value).toString(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return ""; }
~~~///(^v^)\\\~~~
这篇关于java 反射取值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南