黑马程序员技术交流社区
标题:
反射问题
[打印本页]
作者:
赵亚威
时间:
2013-4-5 11:27
标题:
反射问题
本帖最后由 赵亚威 于 2013-4-5 12:59 编辑
class ReflectTest{
public static void main(String[] args)throws Exception{
String str= "itcastheima.com" ;
str.charAt(0);
Method method=String.class.getMethod("charAt", int.class);
System.out.println(method.invoke(str,new Object[]{1} ));//为什么不直接赋予一个整数呢?
//这不很麻烦嘛
}
}
作者:
谢波
时间:
2013-4-5 11:46
可以啊
作者:
刘焕新
时间:
2013-4-5 12:06
本帖最后由 刘焕新 于 2013-4-5 12:31 编辑
这个很好理解啊!首先你要
注意
的是
Object和Object[]的区别,前者是个对象,后者是个数组
,数组可包含N个对象。
将invoke方法的参数定义为Object[]就是为了增强它的通用性,因为invoke()实际可以调用的方法千千万,它们参数个数是不一定的。
所以API约定,你要用Method的invoke方法,传入参数就必须是Object[]数组类型。这样,invoke方法内部会将Object[]数组转换为实际调用方法所需的参数类型。
当你传入的参数是基本数据类型时,JVM会自动将基本数据类型封装成其包装类的对象,即:自动装箱。所以,此时参数变成了一个Object对象。
然后这个Object对象被传进去之后,invoke方法不知道、也不会管你传入的参数实际是什么类型,仍然把参数当做Object[]数组类型去使用,后果自然就很可能会出错啦。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2