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

(0)

相关推荐

  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例 1 代码示例 import java.util.*; public class ForeachTest { public static void main(String[] args) { // 创建集合.添加元素的代码与前一个程序相同 Collection books = new HashSet(); books.add(new String("book1")); books.add(new String("book2&quo

  • java实现遍历树形菜单两种实现代码分享

    文本主要向大家分享了java实现遍历树形菜单的实例代码,具体如下. OpenSessionView实现: package org.web; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.se

  • Java Set集合的遍历及实现类的比较

    Java Set集合的遍历及实现类的比较 Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法 package com.sort; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * 一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2, * @author Owner * */

  • java 对文件夹目录进行深度遍历实例代码

    java 对文件夹目录进行深度遍历实例代码 1.题目 对指定目录进行所有内容的列出(包含子目录中的内容),也可以理解为对目录进行深度遍历. 2.解题思想 从电脑中获取文件目录,建立函数对其遍历,在这个函数中需要对该目录中的每个文件进行判断,如果文件还是目录,则调用函数本身继续对其进行遍历,如果文件不是目录,则直接输出文件名.为了加强显示的效果,我们还可以建立一个getSpace函数,对其进行缩进. 需要注意的是,不要直接遍历C盘的内容,其目录层次太深,含有太多的系统级文件,容易返回为空,导致空指

  • Java中map遍历方式的选择问题详解

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k

  • 图解二叉树的三种遍历方式及java实现代码

    二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子. 1.二叉树节点 作为图的特殊形式,二叉树的基本组成单元是节点与边:作为数据结构,其基本的组成实体是二叉树节点(binary tree node),而边则对应于节点之间的相互引用. 如下,给出了二叉树节点的数据结构图示和相关代码: // 定义节点类: private static class BinNode { private Object element; private BinNode lChild;// 定义指向

  • 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

  • Java 通过反射给实体类赋值操作

    表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了, 怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量就多了起来,其代码量不说,维护也是一个问题. 所以就有了这样一个类,只需把request和实体类对象传进去就行了, 这样就会得到一个有值的实体类对象 下面是代码示例 import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Date; import ja

  • Mysql字段和java实体类属性类型匹配方式

    Mysql字段和java实体类属性类型匹配 参见下图: 数据库字段转实体类字段 DROP FUNCTION IF EXISTS f_spiltStr; CREATE FUNCTION `f_spiltStr`(DATA1 varchar(50)) RETURNS varchar(1000) CHARSET utf8 BEGIN SET @length = LENGTH(DATA1) - LENGTH(REPLACE(DATA1,'_','')); SET @i = 1; set @result

  • java中给实体对象属性的空值赋默认值

    目录 给实体对象属性的空值赋默认值 给实体类赋默认值通用方法 给实体对象属性的空值赋默认值 private final String defaultStr = ""; private final Date defaultDate = new Date(); private final BigDecimal defaultDecimal = new BigDecimal(0); private final Timestamp defaultTimestamp=new Timestamp(

  • C#编程获取实体类属性名和值的方法示例

    本文实例讲述了C#编程获取实体类属性名和值的方法.分享给大家供大家参考,具体如下: 遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User { public string name { get; set; } public string gender { get; set; } public string age { get; set; } } //实例化类,并给实列化对像的属性赋值: User u = new User(); u.name

  • Mybatis实体类属性与数据库不一致解决方案

    当实体类属性和数据库不一致时,使用mybatis查询数据库返回实体类自动封装就会出现问题.针对这种情况,有两种解决方案. 1.使用别名查询 <!-- 配置查询所有操作 --> <select id="findAll" resultType="com.itheima.domain.User"> select id as userId,username as userName,birthday as userBirthday, sex as us

  • SpringBoot 返回Json实体类属性大小写的解决

    目录 返回Json实体类属性大小写问题 Json转换大小写的坑 返回Json实体类属性大小写问题 总归上述问题Rt,其实今天开发刚遇到,当时找了半天为啥前台传参后台却接收不到,原来是返回的时候返回小写,但是前台依旧大写传参. 查了很多后发现其实是json返回的时候把首字母变小写了,也就是Spring Boot中Jackson的功劳 百度后得@JsonProperty注解完美解决.但与此同时会出现两个问题 如果注解放到属性上,则返回的时候既有大写也有小写, @JsonProperty("Ao&qu

  • 利用java反射机制调用类的私有方法(推荐)

    试想一下,如果你可以轻易地调用一个类的私有方法,那么是不是说你的封装都失效了?最近在看java的反射机制,发现居然可以利用java的反射机制去调用其他类的私有方法,至于这能干什么,那就见人见智了.. 我写的一段简易实例代码如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @author thomaslwq * @version 创建时间:Sep 4, 201

  • 浅谈java中为什么实体类需要实现序列化

    当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决这个问题我们使用一种技术:session的持久化. 什么是session的持久化? web服务器会把暂时不活动的并且没有失效的HTTPSession对象转移到文件系统或数据库中储存,服务器要用时在把他们转载到内存. 把Session对象转移到文件系统或数据库中储存就需要用到序列化: jav

  • MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题

    在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突问题,感兴趣的朋友一起学习吧. 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, or

随机推荐