黑马程序员技术交流社区

标题: 反射 invoke问题 [打印本页]

作者: 王振宇    时间: 2011-11-24 13:59
标题: 反射 invoke问题
本帖最后由 王振宇 于 2011-11-24 15:08 编辑

我的问题很简单,就是不知道怎么写!在线求解答
大致代码
我有个方法

  1. class MethodDemo{
  2.   public int show()
  3.   {
  4.     System.out.println("this is show() method");
  5.   }
  6. }
  7. class MethodTest
  8. {
  9.   public staitc void main(String[] args)
  10.   {
  11.      MethodDemo md = new MethodDemo();
  12.      Method method = md.getClass().getMethod("show",????);
  13.      method.invoke(md,??????);
  14.   }
  15. }
复制代码
问题就是打???号的地方,带参数的方法视频里讲了,我也明白了,我这个show方法时不带参数的
getMethod方法的第二个参数我应该写什么呢?null?void.clas?
invoke方法也是一样,没有参数我肯定也不需要传参数,???号的地方我应该写什么呢?

如果我写null是这样的警告:
MethodDemo.java:8: 警告:最后一个参数使用了不准确的变量类型的 varargs 方法的非 v
arargs 调用;
对于 varargs 调用,应使用 java.lang.Class<?>
对于非 varargs 调用,应使用 java.lang.Class<?>[],这样也可以抑制此警告
                Method md = mt.getClass().getMethod("show",null);
                                                            ^
如果我写void.class是编译可以通过,运行的时候会说找不到show(void)方法,类似这个意思。







作者: 王振宇    时间: 2011-11-24 14:15
帮帮忙呀!
作者: 梦女孩    时间: 2011-11-24 14:20
本帖最后由 梦女孩 于 2011-11-24 14:22 编辑

Method m = "".getClass().getMethod("toString");
System.out.println(m.invoke("abc"));

getMethod的第二个参数是...的 也就是说 可有可无的

作者: 王振宇    时间: 2011-11-24 14:34
“abc”是干什么的?????
作者: 强子    时间: 2011-11-24 14:42
自己运行了一边  ,又去网上找了找,把这个警告干掉了,应该这么写
  1. import java.lang.reflect.*;
  2. class MethodDemo{
  3.   public void show()
  4.   {
  5.     System.out.println("this is show() method");
  6.   }
  7. }
  8. class MethodTest
  9. {
  10.   public static void main(String[] args) throws Exception
  11.   {
  12.      MethodDemo md = new MethodDemo();
  13.      Method method = md.getClass().getMethod("show",new Class[]{});
  14.      method.invoke(md,new Object[0]);
  15.   }
  16. }
复制代码
varargs 英文释义:不定参数
null代表不确定的对象

作者: 王振宇    时间: 2011-11-24 14:54
强子 发表于 2011-11-24 14:42
自己运行了一边  ,又去网上找了找,把这个警告干掉了,应该这么写varargs 英文释义:不定参数
null代表不 ...

谢谢强子,经过我的测试你得方法可以实现,通过 梦女孩 的我自己测试了一下,如果被反射的方法没有参数,getMethod 和 invoke 这两个方法 可以只写第一个参数,getMethod("show"),invoke(md)这样写也可以!~~~
作者: 王振宇    时间: 2011-11-24 14:56
还有 各位admin不是提问也加分呢吗?我是抱着学习的态度来问问题,但是加分也很重要呀@!~~~
作者: 强子    时间: 2011-11-24 14:58
如果问题以解决,结贴后加分。多关注论坛。
作者: 王振宇    时间: 2011-11-24 15:08
强子 发表于 2011-11-24 14:58
如果问题以解决,结贴后加分。多关注论坛。

不好意思!好久没上了!~~~再次感谢!




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