JAVA反射获得属性及简单应用
来源:互联网 发布:淘宝菜鸟驿站 编辑:程序博客网 时间:2024/06/03 19:37
/* *传入对象t *这里的T为泛型 */public static <T> void getName(T t) { //获得该对象的属性 Field[] filed = t.getClass().getDeclaredFields(); for (int i = 0; i < filed.length; i++) { //打印属性名称 System.out.println(filed[i].getName()); } }
全部代码
util.java
package util;import java.lang.reflect.Field;public class Util<T> { public static <T> void getName(T t) { // 获得该对象的属性 Field[] filed = t.getClass().getDeclaredFields(); for (int i = 0; i < filed.length; i++) { System.out.println(filed[i].getName()); } } public static void main(String[] args) { new Util<>().getName(new Netschool()); }}
Netschool.java
package util;import java.util.Date;/** * 网校信息表 * * @author xiachenxiang * */public class Netschool { /** * 网校id */ private String school_id; /** * 网校名称 */ private String name; /** * 网校简介 */ private String details; /** * 网校创建人(校长) */ private String principal; /** * 网校创建日期 */ private Date creation_date; /** * 联系电话 */ private String phone; /** * 网站地址 */ private String web_addr; /** * 微信公众号 */ private String wechat; /** * QQ号 */ private String qq; /** * 创建者 */ private String creater; /** * 创建时间 */ private Date creation_time; /** * 修改人 */ private String updater; /** * 修改时间 */ private Date update_time; /** * 缩略图 */ private String pic_img; public String getSchool_id() { return school_id; } public void setSchool_id(String school_id) { this.school_id = school_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDetails() { return details; } public void setDetails(String details) { this.details = details; } public String getPrincipal() { return principal; } public void setPrincipal(String principal) { this.principal = principal; } public Date getCreation_date() { return creation_date; } public void setCreation_date(Date creation_date) { this.creation_date = creation_date; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getWeb_addr() { return web_addr; } public void setWeb_addr(String web_addr) { this.web_addr = web_addr; } public String getWechat() { return wechat; } public void setWechat(String wechat) { this.wechat = wechat; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } public String getCreater() { return creater; } public void setCreater(String creater) { this.creater = creater; } public Date getCreation_time() { return creation_time; } public void setCreation_time(Date creation_time) { this.creation_time = creation_time; } public String getUpdater() { return updater; } public void setUpdater(String updater) { this.updater = updater; } public Date getUpdate_time() { return update_time; } public void setUpdate_time(Date update_time) { this.update_time = update_time; } public String getPic_img() { return pic_img; } public void setPic_img(String pic_img) { this.pic_img = pic_img; }}
运行结果
school_idnamedetailsprincipalcreation_datephoneweb_addrwechatqqcreatercreation_timeupdaterupdate_timepic_img
java反射获得属性并赋值网上已经有很多方案了,我自己讲得也不会比人家的好了,我这里主要写一下java反射获得属性的简单应用吧。
这两天写代码的时候需要从map<String,Object>
里面提取数据赋值给制定对象,不但枯燥,而且费时,然后我就写了一些工具类来代替这个
方案一
public static <T> T getObject(T t, Map<String, Object> map) { try { Field[] filed = t.getClass().getDeclaredFields(); for (int i = 0; i < filed.length; i++) { //取消 Java 语言访问检查,简单的说就是可以访问private属性了 filed[i].setAccessible(true); //判断类型并填充 if (filed[i].getType().equals(String.class)) { filed[i].set(t, map.get(filed[i].getName())); } else if (filed[i].getType().equals(Date.class)) { filed[i].set(t, (Date) map.get(filed[i].getName())); } else if (filed[i].getType().equals(Float.class)) { filed[i].set(t, ((BigDecimal) map.get(filed[i].getName())).floatValue()); } else if (filed[i].getType().equals(Integer.class)) { filed[i].set(t, (Integer) map.get(filed[i].getName())); } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } //返回填充后的对象 return t; }
这个方案的好处是直接获得对象,坏处是的加入这个工具类,而且根别人的代码有明细不同。
方案二
public static <T> void getStatementSet(T t) { try { //获得属性名 Field[] filed = t.getClass().getDeclaredFields(); for (int i = 0; i < filed.length; i++) { //获得类名如 Netschool String s = t.getClass().getName().substring(t.getClass().getName().lastIndexOf('.') + 1); //1.将类名首字母小写 如netschool //2.将当前属性名首字母大写 如School_id //3.拼装并输出netschool.setSchool_id //if语句根据不同的类型打印map.get语句 System.out.print(s.substring(0, 1).toLowerCase() + s.substring(1) + ".set" + filed[i].getName().substring(0, 1).toUpperCase() + filed[i].getName().substring(1)); if (filed[i].getType().equals(String.class)) { System.out.println("(map.get(\"" + filed[i].getName() + "\")+\"\");"); } else if (filed[i].getType().equals(Date.class)) { System.out.println("((Date)map.get(\"" + filed[i].getName() + "\"));"); } else if (filed[i].getType().equals(Float.class)) { System.out.println("(((BigDecimal)map.get(\"" + filed[i].getName() + "\")).floatValue());"); } else if (filed[i].getType().equals(Integer.class)) { System.out.println("((Integer)map.get(\"" + filed[i].getName() + "\"));"); } } } catch (IllegalArgumentException e) { e.printStackTrace(); } }
方案二的话缺点是看起来麻烦,但是优点是不用加入工具类并且代码和别人的相同
= = over
阅读全文
0 0
- JAVA反射获得属性及简单应用
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- Java反射-简单应用
- java反射及应用
- java反射及应用
- Java 反射及应用
- 通过java反射获得属性值
- java反射机制获得属性值
- java 反射获得私有属性的对象
- java反射的简单应用
- java反射的简单应用
- java反射机制简单应用
- Java反射的简单应用
- java反射的简单应用
- java反射及应用(一)
- Java反射机制及应用
- 通过java反射获得属性名 和 值
- [自用]门户网站模板-招标公告
- java SE总结
- AI将带我们去何方?(下-展望篇)
- 解读STM32单片机:代码实现 PCROP清除
- innerHTML与innerText区别
- JAVA反射获得属性及简单应用
- java做一个简单的文件管理器(二)
- Unity地形导出为.obj模型
- 初识LoadRunner
- 20170804
- SQL中索引的使用
- 常用正则表达式整理
- 浅谈工程师的调试法宝(一)---Printf串口输出
- Mac 启动加载文件位置(可设置环境变量)