黑马程序员技术交流社区
标题:
这句代码谁能解释一下,泛型反射问题,求
[打印本页]
作者:
我能驾驭住
时间:
2012-6-4 23:13
标题:
这句代码谁能解释一下,泛型反射问题,求
package Demo.collection;
import java.lang.reflect.*;
import java.util.ArrayList;
public class Deni {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
/*ArrayList collection = new ArrayList();
collection.add(1);
collection.add(1L);
collection.add("abc");
int i = (Integer)collection.get(1);//编译要强制类型转换且运行时出错!
*/
ArrayList<String> collection2 = new ArrayList<String>();
collection2.add("abc");
collection2.add("abcd");
//collection2.add("abc");//这两行代码编译时就报告了语法错误
String i2 = collection2.get(0);//不需要再进行类型转换
//System.out.println(i2);
Constructor<String> constructor = String.class.getConstructor(StringBuffer.class);
String str2 = constructor.newInstance(new StringBuffer("abcde"));
System.out.println(str2.charAt(4));
ArrayList<Integer> al = new ArrayList<Integer>();
System.out.println(al.getClass()==collection2.getClass());
//al.add("abc");
al.getClass().getMethod("add",Object.class).invoke(al,"abc");
System.out.println(al.get(0));
}
}
结果:
e
true
abc
作者:
黑马11期李项京
时间:
2012-6-4 23:46
al.getClass().getMethod("add",Object.class).invoke(al,"abc");
System.out.println(al.get(0));
al.getClass()获取字节码返回Class类,调用Class的方法getMethod("add",Object.class)这里有两个参数,第一个参数是方法名,第二个参数是要方法要传入的参数的字节码类型,这里用String.class也可以,调用Method类的方法invoke(al,"abc"),第一个参数是方法所属对象名,第二个参数是方法要传入的参数
作者:
杜俊彪
时间:
2012-6-4 23:59
分开写你就好明白了; Method method = al.getClass().getMethod("add",Object.class) ; 这句话是得到集合al的add(Object obj) 方法;
method.invoke(al,"abc"); 表示 集合al去调用这个add(Object obj)方法,即al.add("abc") ; 然后将它输出来; System.out.println(al.get(0));
作者:
郭宁
时间:
2012-6-5 00:22
al.getClass()//得到al的类
.getMethod("add",Object.class)//得到这个类的add(Object obj)方法
.invoke(al,"abc");//在对象al上调用这哥方法,传个参数"abc" (等同于 al.add("abc"))***为啥能用在对象al上调用这个歌方法?因为这个方法 是从al所属的类中得到的!
下一句 输出就不用说了吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2