一个辅助对象,用于给属性排序

class KeyValue implements Comparable<KeyValue>{
    String key;
    Object value;

    @Override
    public int compareTo(KeyValue another) {
        return this.key.compareTo(another.key);
    }
}

两个函数:

   /**
     * get a series of object's properties
     * @param obj
     * @return
     */
    private String getObjectProperties(Object obj) {
        Field[] fields=obj.getClass().getDeclaredFields();
        //String[] fieldNames=new String[fields.length];
        List<KeyValue> kvList=new ArrayList<KeyValue>(fields.length);

        for(int i=0;i<fields.length;i++){
            KeyValue kv=new KeyValue();
            kv.key=fields[i].getName();
            kv.value=getFieldValueByName(kv.key,obj);

            kvList.add(kv);
        } 

        Collections.sort(kvList);

        StringBuilder sb=new StringBuilder();
        int idx=0;
        for(KeyValue kv:kvList) {
            idx++;
            sb.append("#"+idx+","+kv.key+","+kv.value+"\n");
        }

        return sb.toString();
    }

    /**
     * get property value of a object
     * @param fieldName
     * @param o
     * @return
     */
    private static Object getFieldValueByName(String fieldName, Object o) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[] {});
            Object value = method.invoke(o, new Object[] {});
            return value;
        } catch (Exception e) {
            return null;
        }
    } 

调用效果:

#1,connectPointCode,10005
#2,connectPointDetailCode,1
#3,createdDatetime,2019-12-03 14:54:48.248
#4,createdUser,BatchUser
#5,deliveryDate,Tue Dec 03 14:54:48 JST 2019
#6,errorCount1,null
#7,errorCount2,null
#8,errorCount3,null
#9,interfaceCode,00001
#10,ioCount1,0
#11,ioCount2,null
#12,ioCount3,null
#13,ioStatus,1
#14,processCount,23
#15,updatedDatetime,2019-12-03 14:54:48.248
#16,updatedUser,BatchUser
#17,userDataParam01,AllocationReq_10005_20191127163829.csv
#18,userDataParam02,0
#19,userDataParam03,null
#20,userDataParam04,null
#21,userDataParam05,null
#22,userDataParam06,null
#23,userDataParam07,null
#24,userDataParam08,null
#25,userDataParam09,null
#26,userDataParam10,null

感谢:

https://blog.csdn.net/a1527238987/article/details/79121372

[Java/Reflect]使用反射机制获得一个对象的属性名和属性值的更多相关文章

  1. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  2. 黑马程序员——【Java高新技术】——反射机制

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.Java反射机制:是指“在运行状态中”,对于任意一个类,都能够知道这个类中的所有属性和方法: ...

  3. JAVA类型信息——反射机制

    JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...

  4. java学习之反射机制

    java语言区别于C,C++等准静态语言的最大特点就是java的反射机制.静态语言的最直接定义就是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,J ...

  5. 深入理解Java中的反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  6. Java动态性之反射机制(reflection)

    说到反射机制,第一次接触的人可能会比较懵,反射?什么反射?怎么反射?反射是干嘛的?下面我将在这篇文章中讲讲Java的反射机制 不过在这之前,还有一个问题需要解决,标题名中的动态性,说起动态性,我先介绍 ...

  7. java基础篇---反射机制

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  8. java学习--Reflection反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...

  9. 【Java基础】java中的反射机制与动态代理

    一.java中的反射机制 java反射的官方定义:在运行状态下,可以获取任意一个类的所有属性和方法,并且可通过某类任意一对象实例调用该类的所有方法.这种动态获取类的信息及动态调用类中方法的功能称为ja ...

随机推荐

  1. xadmin 配置内置User模型

    xadmin 配置内置USER模型 默认展示 在你的User模型对应的app下创建adminx 文件 import xadmin from django.contrib.auth import get ...

  2. go工程组织规范

    go编码以workspace形式管理,一个workspace包含所有的Go编码,包含多个版本控制仓库(例如使用git管理的多个仓库).每个仓库包含多个包package,每个package是一个单独的路 ...

  3. 微信小程序(小游戏)后台开发

    小程序开放接口功能,目的是方便小程序接入第三方服务器,比如,商城类小程序,小游戏,需要保存订单数据,玩家信息等.那就需要服务器和数据库, 开发者对于各方关系必须要理清,那就是小程序,用户,开发者服务器 ...

  4. Linux命令——modprobe

    参考:5 UNIX / Linux modprobe Command Examples Linux modprobe command 简介 modprobe用于向Linux Kernel添加 或 移除 ...

  5. rest-assured-doc接口自动化测试,数据驱动测试平台

    原文:https://github.com/rest-assured/rest-assured/wiki/Usage 本文github地址:https://github.com/RookieTeste ...

  6. docker 基本常用操作做

    docker 基本常用操作做(只列举入门常用的命令) 容器生命周期管理 docker run :创建一个新的容器并运行一个命令 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDO ...

  7. springboot学习笔记(二)—— springboot的启动模式设置

    把springboot的启动类图标(spring)去掉,在启动类中添加以下代码 package com.xdr.spring; import org.springframework.boot.Bann ...

  8. tornado项目工程

    项目模块基本架构如下: -------------application.py import tornado.web from views import index, login import con ...

  9. 微信小程序API~检查登录状态

    wx.checkSession(Object object) 检查登录态是否过期. 通过 wx.login 接口获得的用户登录态拥有一定的时效性.用户越久未使用小程序,用户登录态越有可能失效.反之如果 ...

  10. awk命令笔记

    awk是啥? awk(奥克)是linux中一个强大的分析工具,linux面试必考 [root@rainbol ~]# awk Usage: awk [POSIX or GNU style option ...