java反射遍历实体类属性和类型,并赋值和获取值的简单方法

 更新时间:2017年04月13日 10:01:54   投稿:jingxian  
下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

实例如下:

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反射遍历实体类属性和类型,并赋值和获取值的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 并发编程之ThreadLocal详解及实例

    Java 并发编程之ThreadLocal详解及实例

    这篇文章主要介绍了Java 并发编程之ThreadLocal详解及实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java ​​​​​​​HashMap遍历方法汇总

    Java ​​​​​​​HashMap遍历方法汇总

    这篇文章主要介绍了Java ​​​​​​​HashMap遍历方法汇总,HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,下文关于其遍历方法总结需要的小伙伴可以参考一下
    2022-05-05
  • Java枚举学习之定义和基本特性详解

    Java枚举学习之定义和基本特性详解

    枚举是JAVA 5.0后增加的一个重要类型。可以用来表示一组取值范围固定的变量。本文将通过示例为大家详细讲解枚举的定义和基本特性,感兴趣的可以了解一下
    2022-08-08
  • java如何给指定类配置单独的日志文件输出

    java如何给指定类配置单独的日志文件输出

    这篇文章主要介绍了java如何给指定类配置单独的日志文件输出问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • MyBatis3传递多个参数(Multiple Parameters)

    MyBatis3传递多个参数(Multiple Parameters)

    这篇文章主要介绍了MyBatis3传递多个参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringCloud Feign 传输Date类型参数存在误差的问题

    SpringCloud Feign 传输Date类型参数存在误差的问题

    这篇文章主要介绍了SpringCloud Feign 传输Date类型参数存在误差的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 使用mybatis-plus报错Invalid bound statement (not found)错误

    使用mybatis-plus报错Invalid bound statement (not found)错误

    这篇文章主要介绍了使用mybatis-plus报错Invalid bound statement (not found)错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Spring Boot简介与快速搭建详细步骤

    Spring Boot简介与快速搭建详细步骤

    SpringBoot其本身没有添加什么新的技术,就是整合了一些现有的框架,并提供了一些默认的配置,就是这些默认的配置,极大的提高了我们的开发效率。这篇文章主要介绍了Spring Boot简介与快速搭建,需要的朋友可以参考下
    2021-05-05
  • java获取properties属性文件示例

    java获取properties属性文件示例

    Properties类表示了一个持久的属性集。Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。本文使用java读取这些属性,看下面详细介绍吧
    2014-01-01
  • springmvc限流拦截器的示例代码

    springmvc限流拦截器的示例代码

    本篇文章主要介绍了springmvc限流拦截器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论