首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

[反照] 求反射方法

2012-09-03 
[反射] 求反射方法语言:JAVA详情:1) A类、B类继承X类2) C类是A的属性,LISTC是B的属性3) 求一个反射方法,

[反射] 求反射方法
语言:JAVA
详情:
1) A类、B类继承X类
2) C类是A的属性,LIST<C>是B的属性
3) 求一个反射方法, List<c> queryC (X x)

[解决办法]

Java code
//假设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; //返回} 

热点排行