黑马程序员技术交流社区

标题: 关于反射中的Method方法 [打印本页]

作者: 王德云    时间: 2011-10-16 22:32
标题: 关于反射中的Method方法
前一段时间看了张老师讲的反射,没弄明白,跳过去了,今天又去看了。但看到方法的时候,有点弄不明白
如:Method mt=String.class.getMethod("charAt",int.class);
为什么要用String去点呀?

作者: 赵玉成    时间: 2011-10-16 23:47
charAt是String类的方法啊,所以用String.class获得String类的Class对象,{:soso_e129:}小兄弟,学习慢慢来啊,不要急哦
作者: 丁翔    时间: 2011-10-16 23:48
类名。class   可以得到这个类的字节码,然后再点getMethod,是得到这个字节码中表示方法的字节码段,然后()里面的就是表示2参数,这2参数前面那个就是是你要的String类中一个方法的名字,后面那个int。class就是你要调用charAt方法时,要传一个int类型的参数给这个方法。

就这样理解就差不多了吧
作者: 张强+    时间: 2011-10-16 23:50
关于java反射和Method类的问题   
我现在可以用Method类得到一个类的所有方法列表   
但是怎么直接执行它们呢   

例如   
class   A{   
setXXX(){}   
setYYY(){}   
setZZZ(){}   
.........   
}   

class   B{   
A   oa=new   A();   
......   
......   
}   

我不知道   A中的的众set方法具体名字,但是知道他们存,在而且A中的众set方法的名字和和数量都会变动,我如何能在不更改B的代码情况下,无论A的set方法怎么变动可以调用所有set方法。
作者: 朱华    时间: 2011-10-17 13:22
纯手打,请区分。
只跟你说Method的方法可能意义不大,咱们先搞明白什么是反射。
反射是JAVA中特有的一个自己描述自己属性和方法的一个方式,利用这项技术可以将类名变为参数,在完全不知道类名的情况下,即不需要了解你要操作的是哪个类,我就先写一个通用的方法出来,以后你调用这个方法的时候,可以根据你传进来的类名的参数不同来返回不同的数据。
Method mt=String.class.getMethod("charAt",int.class);
这句中,其实正如你所说,不必须用String去点class,那个String不是必须的,String可以抽象成一个通用的写法Object,
Object.class.getMethod("你要返回的方法名",该方法的参数.class);
这里之所以写成String,只是为了拿String举一个例子而已,后面终究要变成Object来调用的吧。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2