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
  • asp之家 软件编程 m.aspxhome.com