Java 遍历类中的属性

    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);
                    name = name.substring(0,1).toUpperCase()+name.substring(1); //将属性的首字符大写,方便构造get,set方法
                    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());
                        }
                    }
                }
        }  
时间: 2024-08-06 11:53:19

Java 遍历类中的属性的相关文章

java中遍历类中的属性

public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{        Field[] field = model.getClass().getDeclaredFields();        //获取实体类的所有属性,返回Field数组        

Log4Qt使用(三)在DailyRollingFileAppender类中增加属性mMaxBackupIndex

在Log4Qt中存在一个比较大的问题,当使用 DailyRollingFileAppender对日志进行输出时,会无限输出文件,也就是说,当系统运行很久时,日志文件有可能很大,大到无法想象.因此,很多开发者希望在DailyRollingFileAppender中加一个属性,用于配置日志文件的个数. 但是如何做呢? 在Java语言中,我找到一个实例,但是在QT中,没能找到,因此,只能通过自己看源代码,分析从而进行改进. 主要代码如下: dailyrollingfileappender.h: cla

java反射之遍历类中所有内部类及属性方法

package com.zr.entity; /** * 仅用于测试类,从实际项目中抽出来的 * @author zr * */ public class Constant { /** * 参数校验枚举类 * @author zr * */ public static enum ResultObjectType { //成功 SUCC(0), //失败,异常 ERROR(1), //参数错误 PARAMERROR(2), //数据为空 NODATA(9); private Integer val

将source类中的属性值赋给target类中对应的属性

/** * 对象的属性值拷贝 * <p> * 将source对象中的属性值赋值到target对象中的属性,属性名一样,类型一样 * <p> * example: * <p> * source: * <p> * String name; * String address; * Integer age; * Date birthday; * <p> * target: * String name; * String address; * String

Python类中实例属性的通用显示工具

0.说明 以下的思想方法非常有用,可以帮助你在Python开发提高开发和维护效率,所以可能的话,请仔细琢磨一下其中的代码. 之前在用Python编写一个类时,为了显示的友好性,总是需要在每个类中重载__str__或者__repr__方法,现在有了更好的方法,不需要在每个类中都这么做了,下面给出的方法非常实用. 下面使用的例子使用的Python版本都是Python3.5,但实际上在Python2.7中进行也没有任何影响. 1.正常情况下类实例的不友好显示 在Python中编写一个类时,由于没有重载

实体类、数据访问类中的属性拓展

类中: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; namespace 实体类_数据访问类.App_Code { public class Users { SqlConnection conn = null; SqlCommand cmd = null; public Users() { conn = new S

Java继承类中static成员函数的重写

在java中,static成员函数是否可以被重写呢? 结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行. 也就是说,虽然你可以定义一个重写函数,但是该函数没有多态特性.让我们测试一下: 1 class testClass1{ 2 static void SMothod(){ 3 System.out.println("static in testClass1"); 4 } 5 } 6 class testClass2 extends

C#类中的属性和字段

字段就是类中自定义的一些变量或是常量,用来记录此类的相关信息和属性,通常和外部定义没什么区别,就是需要添加public等修饰符: 属性也是是类中的概念之一,就是外部访问内部私有(private)字段的一个函数方法, 一般分为自定义属性: 使用get,set访问器自定义对字段赋值 默认定义, 只声明get和set不具体指定,则会默认生成属性字段. 注意只读和只写属性可以通过只定义get和set中的一个来实现: 属性也可以设置值来限制对字段的访问,例如在set中可以添加判断,get返回中可以返回其他

Java Math 类中的新功能--浮点数

Java™语言规范第 5 版向 java.lang.Math和 java.lang.StrictMath添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分介绍了很有意义的新的数学方法.它提供了在还未出现计算机的时代中数学家比较熟悉的函数.在第 2 部分中,我主要关注这样一些函数,它们的目的是操作浮点数,而不是抽象实数. 就像我在 第 1 部分中提到的一样,实数(比如 e或 0.2)和它的计算机表示(比如 Java double)之间的区别是非常重要的