当前位置: 代码迷 >> Web前端 >> 反照获取对象的属性值
  详细解决方案

反照获取对象的属性值

热度:332   发布时间:2012-11-07 09:56:10.0
反射获取对象的属性值

Java 代码

1 > bean 对象

package com.whbs.bean;

?

public class UserBean {

??? private Integer id ;

??? private int age ;

??? private String name ;

??? private String address ;

???

??? public UserBean(){

?????? System. out .println( " 实例化 " );

??? }

???

??? public Integer getId() {

?????? return id ;

??? }

??? public void setId(Integer id) {

?????? this . id = id;

??? }

??? public int getAge() {

?????? return age ;

??? }

??? public void setAge( int age) {

?????? this . age = age;

??? }

??? public String getName() {

?????? return name ;

??? }

??? public void setName(String name) {

?????? this . name = name;

??? }

??? public String getAddress() {

?????? return address ;

??? }

??? public void setAddress(String address) {

?????? this . address = address;

??? }

???

???

???

}

?

2 > 反射测试

?

package com.whbs.test;

?

import java.lang.reflect.Field;

import java.lang.reflect.Method;

?

import com.whbs.bean.UserBean;

?

public class Test1 {

?

??? public static void main(String[] args) throws Exception {

?

??????

?????? /*

?????? ? * 实列化类 方法 1

?????? ? */

?????? //String classPath = "com.whbs.bean.UserBean";

?????? //Class cla = Test1.class.getClassLoader().loadClass(classPath);

?????? //Object ob = cla.newInstance();

??????

?????? /*

?????? ? * 实列化类 方法 2

?????? ? */

?????? UserBean bean = new UserBean();

?????? bean.setId(100);

?????? bean.setAddress( " 武汉 " );

??????

?????? // 得到类对象

?????? Class userCla = (Class) bean.getClass();

??????

?????? /*

?????? ? * 得到类中的所有属性集合

?????? ? */

?????? Field[] fs = userCla.getDeclaredFields ();

?????? for ( int i = 0 ; i < fs. length ; i++){

?????????? Field f = fs[i];

?????????? f.setAccessible( true ); // 设置些属性是可以访问的

?????????? Object val = f.get(bean); // 得到此属性的值 ???

??????

?????????? System. out .println( "name:" +f.getName()+ "/t value = " +val);

??????????

?????????? String type = f.getType().toString(); // 得到此属性的类型

?????????? if (type.endsWith( "String" )) {

????????????? System. out .println(f.getType()+ "/t String" );

????????????? f.set(bean, "12" ) ;?? ???? // 给属性设值

?????????? } else if (type.endsWith( "int" ) || type.endsWith( "Integer" )){

????????????? System. out .println(f.getType()+ "/t int" );

????????????? f.set(bean,12) ;? ???? // 给属性设值

?????????? } else {

????????????? System. out .println(f.getType()+ "/t" );

?????????? }

??????????

?????? }

??????

??????

?????? /*

?????? ? * 得到类中的方法

?????? ? */

?????? Method[] methods = userCla.getMethods();

?????? for ( int i = 0; i < methods. length ; i++){

?????????? Method method = methods[i];

?????????? if (method.getName().startsWith( "get" )){

????????????? System. out .print( "methodName:" +method.getName()+ "/t" );

????????????? System. out .println( "value:" +method.invoke(bean)); // 得到 get 方法的值

?????????? }

?????? }

??? }

?

}

  相关解决方案