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编译时的泛型...唯有遍历所有元素类型了
反正和反射没关系