A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangleixhlm 中级黑马   /  2014-5-23 22:23  /  1892 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangleixhlm 于 2014-5-24 22:05 编辑

如以下代码:
  1. package test1;

  2. import java.lang.reflect.Method;


  3. public class test9 {
  4.     public static void main(String[] args) throws Exception
  5.     {
  6.             String str="test1.Admin";
  7.             Class<? extends Object> c = Class.forName(str);
  8.             Admin obj = (Admin) c.newInstance();
  9.             obj.setId("zhang3");
  10.             System.out.print(obj);
  11.             //第一个参数是取方法名,第二个参数是什么用?
  12.             Method m = c.getMethod("setId", new Class[]{Class.forName("java.lang.String")});
  13.             m.invoke(obj, new Object[]{"penghao122"});
  14.             m = c.getMethod("getId", new Class[]{});
  15.             m.invoke(obj, new Object[]{});
  16.     }
  17. }

  18. class Admin
  19. {
  20.                 public Admin(){}
  21.                 private String id = "";
  22.                 public String getId()
  23.                 {
  24.                         System.out.print("\n" + id);
  25.                         return id;
  26.                 }
  27.                 public void setId(String id)
  28.                 {
  29.                         this.id = id;
  30.                 }
  31.                 public String toString()
  32.                 {
  33.                         return id;
  34.                 }
  35. }
复制代码


getMethod方法有点疑问,在代码中有注释的地方,感觉第二个参数没用啊

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

4 个回复

倒序浏览
Method m = c.getMethod("setId", new Class[]{Class.forName("java.lang.String")});

, new Class[]{Class.forName("java.lang.String") 接收的是Class类的数组类型
回复 使用道具 举报
import java.lang.reflect.Method;

public class Method01 {

    public static void main(String[] args) throws Exception

    {

            String str="Admin";

            Class<? extends Object> c = Class.forName(str);

            Admin obj = (Admin) c.newInstance();

            obj.setId("zhang3");

           // System.out.print(obj);

         
            // Method m = c.getMethod("setId",String.class); // 这里调用setId一个参数的函数。
             Method m2 = c.getMethod("setId",String.class,String.class); //   第1 步:    给 SetId(Strng1.class,String.class)添加两个参数,
           // m.invoke(obj, new Object[]{"penghao122"});

          //  m = c.getMethod("getId", new Class[]{});

          //  m.invoke(obj, new Object[]{});
             m2.invoke(obj,"周杰伦","王力宏");  //第2步 :在这里调用俩个参数的函数setId,
      
    }

}

class Admin

{

                public Admin(){}

                private String id = "";

                public String getId()

                {

                        System.out.print("\n" + id);

                        return id;

                }

                public void setId(String id)

                {

                        this.id = id;

                }
                     
                  public void setId(String id,String id2)  //  第三步:   //  SetId(Strng1.class,String.class) 这个对应这个参数函数。通过得到的结果得知:
                                                              //getMethod(obj,new Class{....})这个函数的第二个参数,这个数组用来添加的参数是为了
                    // 对应你在类中调用的函数。你写的这个 m.invoke(obj, new Object[]{});这里数组内没有添加参数,
                    // 所以调用的是空参的getId();  希望你帮助你,
                {

                    
      System.out.println(id+"..."+id2);

                }


                public String toString()

                {

                        return id;

                }

}

QQ截图20140524203504.png (13.11 KB, 下载次数: 55)

QQ截图20140524203504.png
回复 使用道具 举报
sheng6699 发表于 2014-5-24 20:35
import java.lang.reflect.Method;

public class Method01 {

原来如此,了解了。:handshake
回复 使用道具 举报
wangleixhlm 发表于 2014-5-24 20:40
原来如此,了解了。

呵呵。。加油啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马