import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
public class GenericTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//为什么把String改为Integer之后,在invoke中传入字符串类型的参数就能行呢?
//具体代码见下面的单行注释
ArrayList<String> collection = new ArrayList<String>();
//ArrayList<Integer> collection = new ArrayList<Integer>();
try {
collection.getClass().getMethod("add", Object.class).invoke(collection, 2);
//collection.getClass().getMethod("add", Object.class).invoke(collection, "abc");
//将上面的代码都换成单行注释的代码之后运行有结果,为什么用没注释的代码情况下编译通不过。
//为什么报java.lang.Integer cannot be cast to java.lang.String异常。
//而在加注释代码情况下却不报java.lang.String cannot be cast to java.lang.Integer异常?
System.out.println(collection.get(0));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException 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();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} |