【反射】通过反射(包括父对象)获取指定字段的值

/**
	 * 拼接id+" "+ name
	 * @param list 处理对象集合
	 * @param map  字段map对象,开始只有key,通过反射添加value
	 * @return
	 */
	public static <T> ArrayList<String> getIdAppendName(List<T> list,Map<String,String> map){
		ArrayList<String> items = new ArrayList<String>();  
		if(list == null){
			return items;
		}
		for(T t:list){
			getReflectValue(t,map);
			Set<Entry<String,String>> map_set=map.entrySet();
			String idandname="";
			for(Entry<String,String> entry:map_set){
				idandname+=entry.getValue()+" ";
			}
			items.add(idandname.trim());
		}
		return items;
	}
	
	/**
	 * 
	 * @param instance 反射对象
	 * @param fieldMap 反射对象字段,通过这个字段获取值
	 */
	private static void getReflectValue(Object instance,Map<String,String> fieldMap){
		if(fieldMap==null){
			return ;
		}
		Method method =null;
		try {
			Class<?> tclass=instance.getClass();
			for(Class<?> clazz = tclass; clazz != Object.class ; clazz = clazz.getSuperclass()) { //包括继承的父对象
				Set<Entry<String,String>> map_set=fieldMap.entrySet();
				for(Entry<String,String> entry:map_set){
					String fieldKey=entry.getKey();
					fieldKey=fieldKey.substring(0,1).toUpperCase()+fieldKey.substring(1);
					method =clazz.getDeclaredMethod("get"+fieldKey) ;
					Object val=method.invoke(instance);
					entry.setValue(val+"");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	public static void main(String[] args) {
		List<QueryFundInfoResult> list=new ArrayList<QueryFundInfoResult>();
		QueryFundInfoResult queryFundInfoResult=new QueryFundInfoResult();
		queryFundInfoResult.setFundCode("001001");
		queryFundInfoResult.setFundName2("测试基金一");
		
		QueryFundInfoResult queryFundInfoResult2=new QueryFundInfoResult();
		queryFundInfoResult2.setFundCode("001002");
		queryFundInfoResult2.setFundName2("测试基金二");
		list.add(queryFundInfoResult);
		list.add(queryFundInfoResult2);
		
		Map<String,String> map=new HashMap<String,String>();
		map.put("fundCode", "");
		map.put("fundName2", "");
		
		System.out.println(getIdAppendName(list,map));
		
//		getReflectValue(queryFundInfoResult,map);
//		System.out.println(map);
	}

转载于:https://my.oschina.net/v512345/blog/889776

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值