java反射遍历实体类属性和类型,并赋值和获取值的简单方法
作者:jingxian 时间:2023-07-15 04:37:18
实例如下:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
/**
* 获取实体类型的属性名和类型
* @param model 为实体类
* @author kou 为传入参数
*/
public class GetModelNameAndType
{
public static void testReflect(Object model) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException, InstantiationException
{
// 获取实体类的所有属性,返回Field数组
Field[] field = model.getClass().getDeclaredFields();
// 获取属性的名字
String[] modelName = new String[field.length];
String[] modelType = new String[field.length];
for (int i = 0; i < field.length; i++)
{
// 获取属性的名字
String name = field[i].getName();
modelName[i] = name;
// 获取属性类型
String type = field[i].getGenericType().toString();
modelType[i] = type;
//关键。。。可访问私有变量
field[i].setAccessible(true);
//给属性设置
field[i].set(model, field[i].getType().getConstructor(field[i].getType()).newInstance("kou"));
// 将属性的首字母大写
name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1)
.toUpperCase());
if (type.equals("class java.lang.String"))
{
// 如果type是类类型,则前面包含"class ",后面跟类名
Method m = model.getClass().getMethod("get" + name);
// 调用getter方法获取属性值
String value = (String) m.invoke(model);
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());
}
}
}
}
public static void main(String[] args)
{
try
{
testReflect(new VO());
}
catch (SecurityException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (NoSuchMethodException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
}
}
标签:java,反射,实体类,赋值
0
投稿
猜你喜欢
基于C#的socket编程的TCP异步的实现代码
2023-04-13 06:42:05
详解Spring Boot 定制HTTP消息转换器
2023-11-24 20:20:51
C语言中输入输出流与缓冲区的深入讲解
2021-06-12 07:44:29
Android中socket通信的简单实现
2023-01-21 12:24:22
C#实现把txt文本数据快速读取到excel中
2022-10-15 02:59:10
深入理解Java显式锁的相关知识
2022-06-16 09:59:41
Stream distinct根据list某个字段去重的解决方案
2022-06-22 22:23:26
Java实战之用Swing实现通讯录管理系统
2021-08-15 08:24:09
Android App如何防止抓包
2023-01-03 05:20:13
java去除空格、标点符号的方法实例
2021-12-01 16:16:42
Android Studio 3.0的下载安装教程
2021-08-10 04:00:45
Android Flutter实现弹幕效果
2022-07-17 16:15:17
Android无限循环RecyclerView的完美实现方案
2022-09-10 01:44:51
java 内部类(匿名类,匿名对象,静态内部类)详解及实例
2022-09-25 11:20:16
改进c# 代码的五个技巧(一)
2021-07-17 23:49:30
解析c#操作excel后关闭excel.exe的方法
2021-08-14 16:55:22
Android自定义View之组合控件实现类似电商app顶部栏
2023-07-26 22:14:10
Mybatis映射文件规则实例详解
2022-04-22 03:08:14
c# 垃圾回收(GC)优化
2023-07-29 23:00:58
SpringBoot如何集成PageHelper分页功能
2022-10-22 03:18:34