通过java反射获取任意对象的字段名及字段值

import java.lang.reflect.Field;

public class ReflectClass3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Person p = new Person(1, "ctl", true, ‘c‘, 2.0f, 2.0, 1L, (short) 1,
				(byte) 1);

		p.setId(0);
		p.setName("张三");
		p.setIsMen(true);
		p.setCh(‘c‘);
		p.setFloat_(2.0f);
		p.setDouble_(3.0);
		p.setLong_(2l);
		p.setShort_((short) 1);
		p.setByte_((byte) 2);
		reflect(p);
	}

	public static void reflect(Object obj) {
		if (obj == null)
			return;
		Field[] fields = obj.getClass().getDeclaredFields();
		String[] types1={"int","java.lang.String","boolean","char","float","double","long","short","byte"};
		String[] types2={"Integer","java.lang.String","java.lang.Boolean","java.lang.Character","java.lang.Float","java.lang.Double","java.lang.Long","java.lang.Short","java.lang.Byte"};
		for (int j = 0; j < fields.length; j++) {
			fields[j].setAccessible(true);
			// 字段名
		  System.out.print(fields[j].getName() + ":");
			// 字段值
			for(int i=0;i<types1.length;i++){
				if(fields[j].getType().getName()
						.equalsIgnoreCase(types1[i])|| fields[j].getType().getName().equalsIgnoreCase(types2[i])){
					try {
						System.out.print(fields[j].get(obj)+"     ");
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}

public class Person {
public int id;
public String name;
public boolean isMen;
public Character ch;
public Float float_;
public Double double_;
public Long long_;
public Short short_;
public Byte byte_;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public boolean getIsMen() {
	return isMen;
}
public void setIsMen(boolean isMen) {
	this.isMen = isMen;
}
public Character getCh() {
	return ch;
}
public void setCh(Character ch) {
	this.ch = ch;
}
public Float getFloat_() {
	return float_;
}
public void setFloat_(Float float_) {
	this.float_ = float_;
}
public Double getDouble_() {
	return double_;
}
public void setDouble_(Double double_) {
	this.double_ = double_;
}
public Long getLong_() {
	return long_;
}
public void setLong_(Long long_) {
	this.long_ = long_;
}
public Short getShort_() {
	return short_;
}
public void setShort_(Short short_) {
	this.short_ = short_;
}
public Byte getByte_() {
	return byte_;
}
public void setByte_(Byte byte_) {
	this.byte_ = byte_;
}
public Person(int id, String name, Boolean isMen, Character ch, Float float_,
		Double double_, Long long_, Short short_, Byte byte_) {
	super();
	this.id = id;
	this.name = name;
	this.isMen = isMen;
	this.ch = ch;
	this.float_ = float_;
	this.double_ = double_;
	this.long_ = long_;
	this.short_ = short_;
	this.byte_ = byte_;
	}

public Person() {
	super();
}
}

通过java反射获取任意对象的字段名及字段值

时间: 2024-10-21 15:03:44

通过java反射获取任意对象的字段名及字段值的相关文章

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

java 反射 获取Class对象的三种方式

String str="hello world"; //方式一 :通过对象的getClass()方法 Class<?> clazz1 =str.getClass(); //方式二:通过类的class属性 Class<?> clazz2 =String.class; //方式三:通过Class类的静态方法forName(String className) Class<?> clazz3 =Class.forName("java.lang.St

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

Java反射获取类和对象信息全解析

反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.forName(String clazzName)静态方法 调用类的class属性,Person.class返回的就是Person的class对象(推荐使用) 调用某个对象的getClass()方法 具体使用还是要根据实际来选择,第一种方式是比较自由的,只要知道一个类名就可以了,其不会做该类是否存在的

Java反射获取对象VO的属性值(通过Getter方法)

有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个Excel导出的工具类,导出的批量数据是以List类型传入的,List里的对象自然每次都不同,这取决于需要导出什么信息. 为了使用方便,将对象的属性名与属性值存于Map当中,使用时就可以直接遍历Map了. 此次的思路是通过反射和Getter方法取得值,然后记录在一个Map当中. Kick start

通过反射获取某个对象下的属性值,或通过父类获取

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; /** * 通过反射获取某个对象下的属性值,或通过父类获取 * User: wangyongfei * Date

利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

有时遇到将数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串 package com.banksteel.util; import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.ut

cxgrid中,如何根据列名或字段名取得footer值

cxgrid中,如何根据列名或字段名取得footer值 注意,不是根据index取得footer值cxgrdtbv1.DataController.Summary.FooterSummaryValues[0]; ------解决方案-------------------------------------------------------- Delphi(Pascal) code with cxGrid1DBTableView1.DataController.Summary do Footer

Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、

查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t;查询指定表的所有字段名:select t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';查询指定表的所有字段名和字段说明:select t.column_name, t.column_name from