要获取对象的所有属性可以使用getDeclaredFields()
方法会返回一个Field数组
遍历这个数组几个遍历所有属性
注意使用这个方法会抛出4个异常
然后根据属性的类型选择执行对应的内容

public static void eachProperties(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Field[] field = model.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
for(int j=0 ; j<field.length ; j++){ //遍历所有属性
String name = field[j].getName(); //获取属性的名字 System.out.println("attribute name:"+name);
name = name.substring(0,1).toUpperCase()+name.substring(1); //将属性的首字符大写,方便构造get,set方法
String type = field[j].getGenericType().toString(); //获取属性的类型
if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
...
}
if(type.equals("class java.lang.Integer")){
...
}
if(type.equals("class java.lang.Short")){
...
}
if(type.equals("class java.lang.Double")){
...
}
if(type.equals("class java.lang.Boolean")){
...
}
if(type.equals("class java.util.Date")){
...
}
}
}

具体执行的内容就是重点了
我们知道模型的属性都会有对应的getter和setter方法
只需要得到对应的getter和setter方法即可获取和设置属性
这里就需要用到getMethod方法

获得getter方法

方法有分带参数和不带参数,我们知道getter方法是不带参数的
获得getter方法如下

Method m = model.getClass().getMethod("get"+name);

获得setter方法

如果是带参数的setter方法,就应该把参数的类型做封装成一个Class<?>泛型数组传入getMethod方法的第二个参数
例如参数是String类型的setter方法如下

Method m = model.getClass().getMethod("set"+name, new Class[] {String.class});

执行getter方法

String value = (String) m.invoke(model);

执行setter方法

m.invoke(model,new Object[] {new String("new value")});

from: http://zhenhappy.github.io/2015/10/26/Java/Java-Each-Properties/

Java遍历对象所有属性的更多相关文章

  1. 遍历对象所有属性(json对象)

    var response = { "status": 1, "message": "\u6210\u529f", "data&qu ...

  2. C# 反射遍历对象所有属性

    [TestMethod] public void Test6() { List<RepaymentRecord> repaymentList = new List<Repayment ...

  3. $.each遍历json对象(java将对象转化为json格式以及将json解析为普通对象)

    查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName": ...

  4. Java循环遍历中直接修改遍历对象

    Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...

  5. 161227、js显示对象所有属性和方法的函数

    要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的. function ShowObjProperty(Obj) { var PropertyList=''; var Pro ...

  6. 111. for(元素变量x:遍历对象obj)

    package com.chongrui.test;/* * for(元素变量x:遍历对象obj){ * 引用X的java语句 *  * } *  *  * */public class test { ...

  7. Java之对象池

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

  8. java遍历Hashmap/Hashtable的几种方法

    一>java遍历Hashtabe: import java.util.Hashtable; import java.util.Set; public class HashTableTest { ...

  9. Java 序列化 对象序列化和反序列化

    Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...

随机推荐

  1. P1164 小A点菜 洛谷

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...

  2. git使用姿势

    IDEA 整合Git 可以在IDEA中Terminal中进行git操作 下面所说的快捷键操作都只是对于IDEA中 拉取提交代码 git pull 从远程仓库更新代码 (ctrl+t) git comm ...

  3. 关于IEnumerator<T>泛型枚举器 和 IEnumerable<T>

    在开发中我们经常会用到 IEnumerable<T> xxx 或者 List<T> xxx 这种集合或者集合接口,实际上就是一个线性表嘛然后结合C#提供的语法糖 foreach ...

  4. 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)

    4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 87 Descripti ...

  5. CF23 E. Tree 树形dp+高精度

    题目链接 CF23 E. Tree 题解 CF竟让卡常QAQ dp+高精度 dp[x][j]表示以x为根的子树,x所属的联通块大小为j,的最大乘积(不带j这块 最后f[x]维护以x为根的子树的最大答案 ...

  6. https建立通讯过程及运行机制 [转]

    ssl与tls: SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确 ...

  7. NOIP练习赛题目4

    肥得更高 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 自2009年以来,A.B站的历史就已经步入了农业变革的黎明期.在两站的 ...

  8. H5在Android 4.4中WebView兼容性问题

    项目中使用到了Vue.YDUI.webpack,部分页面在Android WebView中出现了样式问题,卡顿等等: 1.promise不识别——需要使用babel-polyfill. 2.由于系统限 ...

  9. How do I debug a published XBAP file in VS2010?

    I need to debug a full-trust application either by specifying a URL or, ideally, from within the web ...

  10. chrome主页被hao123篡改,怎么改回来?

    这两天因为下载个别小程序又把我的chrome的主页给篡改了,由于我现在使用的是任务栏快捷方式,没法右键属性,但我想应该和桌面快捷方式是一个道理,于是我找到任务栏文件夹C:\Users\Administ ...