java反射取属性值

//Bean.java
package com.sort;

public class Bean {
   
private String name;

   
private String sex;

   
public Bean() {
       
super();
       
// TODO Auto-generated constructor stub
    }

   
public Bean(String name, String sex) {
       
super();
       
this.name = name;
       
this.sex = sex;
    }

   
public String getName() {
       
return name;
    }

   
public void setName(String name) {
       
this.name = name;
    }

   
public String getSex() {
       
return sex;
    }

   
public void setSex(String sex) {
       
this.sex = sex;
    }
}

//Test.java
package com.sort;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test {
   
public static void main(String[] args) {
        Method metd
= null;
        String fdname
= null;
       
// 添加两个测试数据。。。
        List list = new ArrayList();
        list.add(
new Bean("张三", ""));
        list.add(
new Bean("李四", ""));
       
try {
           
// 遍历集合
            for (Object object : list) {
                Class clazz
= object.getClass();// 获取集合中的对象类型
                Field[] fds = clazz.getDeclaredFields();// 获取他的字段数组
                for (Field field : fds) {// 遍历该数组
                    fdname = field.getName();// 得到字段名,

                    metd
= clazz.getMethod("get" + change(fdname), null);// 根据字段名找到对应的get方法,null表示无参数

                   
if ("name".equals(fdname) && metd != null) {// 比较是否在字段数组中存在name字段,如果不存在短路,如果存在继续判断该字段的get方法是否存在,同时存在继续执行
                        Object name = metd.invoke(object, null);// 调用该字段的get方法
                        System.out.print("姓名:" + name);// 输出结果
                    }
                   
if ("sex".equals(fdname) && metd != null) {// 同上
                        Object sex = metd.invoke(object, null);
                        System.out.println(
"\t性别:" + sex);
                    }
                }
            }
        }
catch (SecurityException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (NoSuchMethodException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (IllegalArgumentException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (IllegalAccessException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (InvocationTargetException e) {
           
// TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

   
/**
     *
@param src
     *            源字符串
     *
@return 字符串,将src的第一个字母转换为大写,src为空时返回null
    
*/
   
public static String change(String src) {
       
if (src != null) {
            StringBuffer sb
= new StringBuffer(src);
            sb.setCharAt(
0, Character.toUpperCase(sb.charAt(0)));
           
return sb.toString();
        }
else {
           
return null;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值