这个方法使用到了java.lang.reflect包的Field类,Method类。
此方法遍历实体类所有属性,对于常用的java包装类类型和java.util.Date,输出其属性值,如果有其它类型,则需自己扩展。
public static void testReflect(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);
String type = field[j].getGenericType().toString(); //获取属性的类型
if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
Method m = model.getClass().getMethod("get"+name);
String value = (String) m.invoke(model); //调用getter方法获取属性值
if(value != null){
System.out.println("attribute value:"+value);
}
}
if(type.equals("class java.lang.Integer")){
Method m = model.getClass().getMethod("get"+name);
Integer value = (Integer) m.invoke(model);
if(value != null){
System.out.println("attribute value:"+value);
}
}
if(type.equals("class java.lang.Short")){
Method m = model.getClass().getMethod("get"+name);
Short value = (Short) m.invoke(model);
if(value != null){
System.out.println("attribute value:"+value); }
}
if(type.equals("class java.lang.Double")){
Method m = model.getClass().getMethod("get"+name);
Double value = (Double) m.invoke(model);
if(value != null){
System.out.println("attribute value:"+value);
}
}
if(type.equals("class java.lang.Boolean")){
Method m = model.getClass().getMethod("get"+name);
Boolean value = (Boolean) m.invoke(model);
if(value != null){
System.out.println("attribute value:"+value);
}
}
if(type.equals("class java.util.Date")){
Method m = model.getClass().getMethod("get"+name);
Date value = (Date) m.invoke(model);
if(value != null){
System.out.println("attribute value:"+value.toLocaleString());
}
}
}
}
==============================
Method类invoke方法的使用
/**
* Method的使用方法
* @author Callan
*
*/
public class Names {
public String firstName = "Callan";
public String lastName = "Wang";
public String getFullName(){
return firstName + " " + lastName;
}
public String getFullName(String firstName,String lastName){
return firstName + " " + lastName;
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Method的使用方法
* @author Callan
*
*/
public class Test {
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Names methods = new Names();
// 调用getFullName()方法
Method method1 = methods.getClass().getMethod("getFullName");
Object obj1 = method1.invoke(methods, null);
System.out.println(obj1);
// 调用getFullName(String firstName,String lastName)方法
Method method2 = methods.getClass().getMethod("getFullName", new Class[]{String.class,String.class});//方法带有两个String类型的参数
// invoke(从中调用基础方法的对象,用于方法调用的参数)
Object obj2 = method2.invoke(methods, new String[]{"Callan","Wang"});
System.out.println(obj2);
}
}
分享到:
相关推荐
下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User { public string name { get; set; } public string gender { get; set; } public string age { get; set; } } ...
主要介绍了Java集合Set、List、Map的遍历方法,是非常实用的遍历技巧,需要的朋友可以参考下
遍历方法各有长短,若不是多表联接查询、显示表格的列数已经固定,一般用实体类(UserEntity)迭代的方式。相反,显示的数据表格行和列不确定,此时用实体类(UserEntity)迭代的方式很难实现,只能用List或List...
SQLSERVER 实体类生成工具,自动遍历局域网内所有数据库服务器; 支持表注释,列注释,
首先新建一个实体类Person @Data public class Person { /** 编码 */ private String code; /** 名字 */ private String name; public Person(String code, String name) { this.code = code; this.name = ...
可以将从数据库中查到的数据直接封到实体类!!!基于反射和元数据
我们也可以使用其他的函数来实现文件查找,例如使用 CFileFind 类来遍历目录树。 使用 VC++ 遍历整个目录树查找文件可以通过使用 _findfirst 和 _findnext 函数来实现,这个方法可以轻松地遍历整个目录树,查找指定...
3.List<T> 和 Dictionary<K> 应该是泛型吧,可以保存实体类 二、各种集合的遍历方法演示 1.ArrayList ArrayList list = new ArrayList(); //for遍历 for (int i = 0; i < list.Count; i++) { SE se = (SE)list...
List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...
JsonDumpReader是一个 PHP 库,它提供了读取和遍历 Wikibase 存储库 JSON 转储(例如 Wikidata JSON 转储)中的实体的方法。 您可以在上找到有关该格式的更多信息。 您可以聘请公司进行自定义开发或。 用法 所有...
ECSape 用于JavaScript游戏的快速,灵活的。 带上自己的组件/系统。...循环遍历实体列表(更快) 检测何时将实体添加到实体列表 检测何时从实体列表中删除实体 动态创建新系统 定义新的系统类型 向
使用递归方式遍历网络返回数据,找到字符串类型为[NSNull class] 替换为@“”。或者去我的github:https://github.com/chenXming/SetNulllWithStr.git 不要吝啬给个星。
java -- 自动生成实体类,dao层,及单表完全动态查询,不需要繁琐的写各种查询方法,为开发提供了极大的遍历
基于原型的解决方案不需要遍历所有实体并对其进行测试以找出它们是否具有正确的组件。 相反,我们重复所有比实体小得多的原型,然后从原型返回所有实体。 引擎不缓存实体! 总览 世界 EcsWorld类充当创建实体,...
(二)定义实体类(成人订单、儿童订单、老人订单),儿童订单、老人订单为成人订单的子类。实体类至少包含但不局限于以上3个。 (三)在各实体类中均需实现各自计算订单价格、显示订单信息的方法,使用方法的重写。...
然后深入剖析1,0,-1三类粗等价类的性质,把求正区域等价转化为0-粗等价类双边递减下的渐增式计算,结合1和-1-粗等价类的传递性,设计双边横向删减实体和纵向删减属性的优化规则,可在每一轮增量计算中缩减计算域,...
(二)定义实体类(成人订单、儿童订单、老人订单),儿童订单、老人订单为成人订单的子类。实体类至少包含但不局限于以上3个。 (三)在各实体类中均需实现各自计算订单价格、显示订单信息的方法,使用方法的重写。...
FileOperater:文件处理工具类 包括 读取文本文件,写出文本文件, 大文件切分,文件下载,文件或文件夹比较,文件或文件夹遍历筛选 ...... HttpClientCard:http工具类 HttpUtil:http工具类 Identification:...