日期:2014-05-19 浏览次数:20769 次
//假设A的C属性是这样定义的 class A { private C c; ... } //B的List<C>属性是这样定义的 class B { List<C> listC; ... } public static List<C> queryC (X x) { List<C> list = new ArrayList<C>(); String[] fieldName = {"c", "listC"}; //不知道x到底是A还是B,所以尝试从两种类型取属性 Class clazz = x.getClass(); Field f = null; for (int i=0; i<fieldName.length; i++) { //根据定义的属性循环 try { f = clazz.getDeclaredField(fieldName[i]); //如果属性存在,则退出循环 break; } catch (Exception e) { //do nothing or print exception } } if (f != null) { //如果属性能取到 f.setAccessible(true); Object obj = f.get(x); //取出属性的值 if (obj != null) { //如果属性的值存在 if (obj instanceof List) { //判断是否是集合属性,也就是判断是否是B的属性 for (Object o : (List)obj) { //循环取出集合属性的元素保存到list中 if (o instanceof C) { list.add((C)o); } } } else if (obj instanceof C) {//如果不是集合属性,说明是A的属性 list.add((C)obj); //直接保存A的C属性的值 } } } return list; //返回 }