我有个List<E> 对象,E的类型未知
假如List.size()>1
Object obj = list.get(0);
-----------------------------
1.得到obj的类型:String className = obj.getClass().getName();
2.我这有N多实体,比如Student.class Teacher.class……
3.Student.class里面有方法addStudent();
4.Teacher.class里面有方法addTeacher();
问题是:
1.我想通过反射自动把obj强制转换成对应的E对象,应该怎么写?
2.我如何根据对象调用该类型对象的方法,比如如果obj的className是Student,然后把obj强制转换成student,再调用student.addStudent()方法?
先谢过,请不吝赐教!
假如List.size()>1
Object obj = list.get(0);
-----------------------------
1.得到obj的类型:String className = obj.getClass().getName();
2.我这有N多实体,比如Student.class Teacher.class……
3.Student.class里面有方法addStudent();
4.Teacher.class里面有方法addTeacher();
问题是:
1.我想通过反射自动把obj强制转换成对应的E对象,应该怎么写?
2.我如何根据对象调用该类型对象的方法,比如如果obj的className是Student,然后把obj强制转换成student,再调用student.addStudent()方法?
先谢过,请不吝赐教!
有这种实现吗???
package test;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List a = new ArrayList();
Object[] d = new String[3];//方法参数
try {
Class c = Class.forName((String) a.get(0));
Method[] b = c.getMethods();
for(int i=0;i<b.length;i++){
if(b[i].getName().indexOf("add")!=-1){
b[i].invoke(c, d);
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
Student的方法就叫add,为何还要加个addStudent???
自己找麻烦。
Student:
public class Student {
public void add(){
System.out.println("Student add...");
}
}
Teacher:
public class Teacher {
public void add(){
System.out.println("Teacher add...");
}
}Test:
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
public class Test { /**
* @param args
* @throws Exception
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws SecurityException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, Exception {
// TODO Auto-generated method stub
List list = new ArrayList();
Student s = new Student();
Teacher t = new Teacher();
list.add(s);
list.add(t);
for(int i=0 ; i<list.size() ; i++){
Object o = list.get(i);
o.getClass().getMethod("add").invoke(o);
}
}}
得到class以后,就可以根据它来找你想要的方法。
然后直接invoke就OK了。