逍遥骑士

天行健,君子以自强不息

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    工作中用到反射,代码记录如下

public String callXMLHandler(Object obj) throws IllegalArgumentException, IllegalAccessException{
		Class<? extends BaseRequestBean> clazz = (Class<? extends BaseRequestBean>)obj.getClass();
		Class<BaseRequestBean> clazzSuper = (Class<BaseRequestBean>) clazz.getSuperclass();//获得父类的Class
		Field field[] = clazz.getDeclaredFields();//getDeclaredFields 无法获得继承属性
		//System.out.println(field.length);
		Field fieldSuper[] = clazzSuper.getDeclaredFields();//获得父类属性
		//System.out.println(fieldSuper.length);
		XMLEntity e = new XMLEntity();
		for (Field f1 : field) {
			f1.setAccessible(true);//取消访问权限检查,以便能够访问非公共属性
			System.out.println(f1.getName()+","+f1.get(obj));
			e.body.put(f1.getName(), (String)f1.get(obj));
		}
		for (Field f2 : fieldSuper){
			f2.setAccessible(true);
			e.head.put(f2.getName(), (String)f2.get(obj));
			}
		String str = buildXML.buildXMLStrByXMLEntity(e);
		return str;
		
	}

  obj中对象属性未使用public修饰,之前未添加f1.setAccessible(true),运行时报错: java.lang.IllegalAccessException: Class union.web.mvc.services.base.InvokeXMLStr can not access a member of class union.web.mvc.services.dataDictionary.addTable.AddTableReqBean with modifiers ""

 

getDeclaredFields()方法无法获得继承属性
getFields()方法无法获得非公共属性
getDeclaredMethods()和getMethods()也同理
posted on 2013-05-07 11:03  逍遥骑士  阅读(233)  评论(0编辑  收藏  举报