通过java反射机制获取该类的所有属性类型、值。

转自:http://blog.sina.com.cn/s/blog_3c62c21f01011xci.html

方法使用了这俩个包下的 field 和method

import java.lang.reflect.Field;

import java.lang.reflect.Method;

public static void getObjectValue(Object object) throws Exception {
  //我们项目的所有实体类都继承BaseDomain
(所有实体基类:该类只是串行化一下)
  //不需要的自己去掉即可
  if (object != null
&& object instanceof BaseDomain)
{//if (object!=null )  ----begin
   // 拿到该类
   Class<?>
clz = object.getClass();
   //
获取实体类的所有属性,返回Field数组
   Field[]
fields = clz.getDeclaredFields();

for (Field
field : fields) {// --for() begin
    System.out.println(field.getGenericType());//打印该类的所有属性类型

//
如果类型是String
    if
(field.getGenericType().toString().equals(
      "class
java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
     //
拿到该属性的gettet方法

Method
m = (Method) object.getClass().getMethod(
       "get"
+ getMethodName(field.getName()));

String
val = (String) m.invoke(object);// 调用getter方法获取属性值
     if
(val != null) {
      System.out.println("String
type:" + val);
     }

}

//
如果类型是Integer
    if
(field.getGenericType().toString().equals(
      "class
java.lang.Integer")) {
     Method
m = (Method) object.getClass().getMethod(
       "get"
+ getMethodName(field.getName()));
     Integer
val = (Integer) m.invoke(object);
     if
(val != null) {
      System.out.println("Integer
type:" + val);
     }

}

//
如果类型是Double
    if
(field.getGenericType().toString().equals(
      "class
java.lang.Double")) {
     Method
m = (Method) object.getClass().getMethod(
       "get"
+ getMethodName(field.getName()));
     Double
val = (Double) m.invoke(object);
     if
(val != null) {
      System.out.println("Double
type:" + val);
     }

}

//
如果类型是Boolean 是封装类
    if
(field.getGenericType().toString().equals(
      "class
java.lang.Boolean")) {
     Method
m = (Method) object.getClass().getMethod(
       field.getName());

Boolean
val = (Boolean) m.invoke(object);
     if
(val != null) {
      System.out.println("Boolean
type:" + val);
     }

}

//
如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
    //
反射找不到getter的具体名
    if
(field.getGenericType().toString().equals("boolean")) {
     Method
m = (Method) object.getClass().getMethod(
       field.getName());

Boolean
val = (Boolean) m.invoke(object);
     if
(val != null) {
      System.out.println("boolean
type:" + val);
     }

}

//
如果类型是Date
    if
(field.getGenericType().toString().equals(
      "class
java.util.Date")) {
     Method
m = (Method) object.getClass().getMethod(
       "get"
+ getMethodName(field.getName()));
     Date
val = (Date) m.invoke(object);
     if
(val != null) {
      System.out.println("Date
type:" + val);
     }

}

//
如果类型是Short
    if
(field.getGenericType().toString().equals(
      "class
java.lang.Short")) {
     Method
m = (Method) object.getClass().getMethod(
       "get"
+ getMethodName(field.getName()));
     Short
val = (Short) m.invoke(object);
     if
(val != null) {
      System.out.println("Short
type:" + val);
     }

}

//
如果还需要其他的类型请自己做扩展

}//for()
--end
   
  }//if (object!=null
)  ----end
 }

// 把一个字符串的第一个字母大写、效率是最高的、
 private static String getMethodName(String
fildeName) throws Exception{
  byte[] items =
fildeName.getBytes();
  items[0] = (byte) ((char)
items[0] - ‘a‘ + ‘A‘);
  return new String(items);
 }

时间: 2024-11-06 07:30:11

通过java反射机制获取该类的所有属性类型、值。的相关文章

java 反射机制-获取对应class信息

1 package reflection; 2 3 public class User { 4 public String name; 5 protected int age; 6 String address; 7 private String sex; 8 9 public User() { 10 super(); 11 } 12 13 public User(String name, int age, String sex) { 14 super(); 15 this.name = nam

java 反射机制获取类名、属性、方法、构造器和反射动态使用

被反射的类: @Table("tb_student") public class Student { @Fields(columnName="id",type="int",length=10) private int id; @Fields(columnName="studentName",type="varchar",length=10) private String studentName; @Fiel

Java反射机制可以动态修改实例中final修饰的成员变量吗?

问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 1 public Class Person { 2 private final String name = "damon

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

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可

Java反射机制能够获取的信息,与应用

一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动态调用对象的方法的骚操作称为java语言的反射机制. 二.Java反射机制能够获取及操作哪些信息? [1]获取类的包名 + 类名 1 package com.zyy.test.reflect; 2 3 public class TestReflect { 4 5 public static void

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

Java反射机制demo(四)—获取一个类的父类和实现的接口

Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 Object 类.一个接口.一个基本类型或 void,则返回 null.如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象. 测试代码: package com.aaron.reflect; public class Demo4 { public static void

java反射机制,通过类名获取对象,通过方法名和参数调

try {//得到对象Class c = Class.forName("完整类名");Object yourObj = c.newInstance();//得到方法Method methlist[] = cls.getDeclaredMethods();for (int i = 0; i < methlist.length; i++) {Method m = methlist[i];}//获取到方法对象,假设方法的参数是一个int,method名为setAgeMethod sAg

JAVA反射机制—学习总结

最近收到很多关于Java反射机制的问题留言,其实Java反射机制技术方面没有太多难点,或许是大家在学习过程中遗漏了细小知识点,导致一些问题无法彻底理解,现在我们简单的总结一下,加深印象. 什么是反射机制? "JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制."我们通过一些例子,更好理解反射机制.Class类 我们知道Java是一门面向对象