通过方法的反射来看泛型
我的理解:泛型的本质,从反射的角度来讲,所以类,方法都是属于一种classtype,定义classtype来接受同一type的不同对象
首先理解编译和运行。
1.方法的反射操作是在程序运行的时候操作的,并不经过程序的编译。
2.通过方法的反射,我们可以在泛型中插入不同类型的值。泛型就是规范你的输入。当你的输入类型和定义类型不相同时,代码的编译就不会通过。但是通过反射就能通过编译。
3.泛型在经过编译后,就不会存在泛型了。
现在我们来看具体的代码实现:泛型的实质
import java.lang.reflect.Method; import java.util.ArrayList; /** * * @author ZYong * */ public class methodDemo2 { public static void main(String[] args) { // 定义一个Array类,这是个可以接受任何输入值(object) ArrayList llst1 = new ArrayList(); // 定义一个存在泛型Array类,这是个只能接受String类型的值 ArrayList<String> llst2 = new ArrayList<String>(); llst2.add("hello"); Class c1 = llst1.getClass(); Class c2 = llst2.getClass(); System.out.println(c1 == c2); //方法的反射会出现异常,我们会加上try-catch。因为在进行反射时,并不知道方法是否具体存在。 try { //要得到一个方法。就是得到一个类,就是得到一个类的类类型 Method m = c2.getMethod("add", Object.class); m.invoke(llst2, 10); System.out.println(llst2.size()); System.out.println(llst2); // 不能使用for遍历 // for (int i = 0; i < llst2.size(); i++) { // System.out.println(l2.get(i)); // } } catch (Exception e) { e.printStackTrace(); } } }