但是我们想,集合里add方法的参数是一个泛型,而泛型默认为Object类型 那我们何尝不可以用Object类型来获取?
虽然思考方向好像没问题,但是你得说法很容易让人误以为下面这样写是可以获取add(Integer)方法的
Method m = c.getMethod("add", Integer.class);
然后
不严谨,事实上是无法编译而非无法运行编译时会进行泛型检查,而由于泛型擦除,运行的时候反而没有泛型检查
然后...绕过泛型检查直接强转就好了
- ArrayList<Integer> array = new ArrayList<Integer>();
- array.add(3);
- ((ArrayList<String>)(Object)array).add("test");
- System.out.println(array);
复制代码
事实上泛型的在运行时全都是Object类型,如果你从集合里get出来的话,它会执行checkcast指令(相当于代码中的强转),然后后续使用泛型类的代码就能正常运行