日期:2014-05-20  浏览次数:20619 次

一个关于java泛型反射的问题

public void get(List<?> list) {
}
//我想要在方法里遍历泛型?的所有域,因为list是动态传入,泛型不定,所以我得用反射来写,但是下面我就不知道怎么写了,不知道怎么处理这泛型,大牛帮忙

------解决方案--------------------
引用:

public void get(List<?> list) {
}
//我想要在方法里遍历泛型?的所有域,因为list是动态传入,泛型不定,所以我得用反射来写,但是下面我就不知道怎么写了,不知道怎么处理这泛型,大牛帮忙


Type type = list.getClass().getGenericSuperclass();
//或这个
Type[] types = list.getClass().getGenericInterfaces();

按需选择用那个
------解决方案--------------------
是否是这个:



import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
class Person{
    private int id;
    private int age;
    public Person(int id, int age) {
        super();
        this.id = id;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}
public class ListTest {
    public  static <T> void get(List<T> list) throws Exception {
        if(list==null
------解决方案--------------------
list.size()==0){
            System.out.println("Null");
        }else{
            T t=list.get(0);
            Field[] fields=t.getClass().getDeclaredFields();
            for(Field f:fields){
                f.setAccessible(true);
                System.out.println(f.getName()+" "+f.get(t));
            }
        }
    }
    public static void main(String[] args) throws Exception {
        List<Person> list=new ArrayList<Person>();
        list.add(new Person(1, 2));
        get(list);
    }
}


------解决方案--------------------
先通过list.getClass(). getsuperclasses()得到一个parameterizedType对象(强转),
然后通过上面得到的对象的getActualTypeArguments()方法 得到   列表类型实际类型参数的 Type 对象的数组,数组的第一个Class对象,就是你所需要的   具体泛型(类对应的Class对象),不知道对不对。。。。应该可以的。。。
------解决方案--------------------
java的泛型是编译期的,运行期没泛型
你说的传入动作显然是运行期,所以是拿不到泛型的
如果你想猜一下传入List编译时的泛型...唯有遍历所有元素类型了
反正和反射没关系