分享

Java动态调用方法

 quasiceo 2015-01-17

Java动态调用方法

Java代码  收藏代码
  1. public void function(String str)  
  2.   
  3. {  
  4.   
  5.       / /根据 str的值 调用相应的方法  
  6.   
  7. }  
  8.   
  9. public void test()  
  10.   
  11. {  
  12.   
  13.      / /code  
  14.   
  15. }  


如str的值为test,就调用test方法



主要用到java反射机制,Class和Method这些类。



动态调用的方法:a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{})

其中,a为类的对象,str为要被调用的方法名

1、a.getClass()得到a.class 对象

2、getMethod(str, new Class[]{})得到a对象中名为str的不带参数的方法。。。

      如果str方法带参数如str(String s, int i),就要这样写getMethod(str, new Class[]{String.class,int.class})

3、invoke(a,new Object[]{})调用方法,第一个参数是要调用这个方法的对象,如果方法是static的,这个参数可以为null

      如果调用有参数的方法str(String s, int i),应该这样写invoke(a,new Object[]{"jimmy", 1})



下面是代码,帮助理解
Java代码  收藏代码
  1. public class MovingInvokeTest  
  2. {  
  3.     private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest();    / /创建MovingInvokeTest对象  
  4.   
  5.   
  6.     public void do_test(String str,int i) throws Exception                                                 / /根据str字符串调用方法,变量i只是为了判断  
  7.   
  8.                                                                                                                                           / /调用有几个参数的方法  
  9.     {  
  10.       if(i == 0)                   / /调用没有参数的方法  
  11.        movingInvokeTest.getClass().getMethod(str, new Class[]{}).invoke(movingInvokeTest, new Object[]{});  
  12.       else if(i == 1)            / /调用有一个参数的方法,参数为String类型的s  
  13.        movingInvokeTest.getClass().getMethod(str, new Class[]{String.class}).invoke(movingInvokeTest, new Object[]{"s"});  
  14.       else if(i == 2)           / / /调用有两个参数的方法 参数分别为String类型的qw和int型的1  
  15.        movingInvokeTest.getClass().getMethod(str, new Class[]{String.class,int.class}).invoke(movingInvokeTest, new Object[]{"qw",1});  
  16.     }  
  17.   
  18.   /* 
  19.  
  20.    * 下面是3个方法 
  21.  
  22.    */  
  23.   
  24.     public void speak()  
  25.   
  26.   {  
  27.   
  28.          System.out.println("调用的没有参数的方法");  
  29.   
  30.   }  
  31.     public void speak(String s)  
  32.     {  
  33.        System.out.println("调用有一个参数的方法,参数为:"+s);  
  34.     }  
  35.     public void speak(String s,int i)  
  36.     {  
  37.         System.out.println("调用有两个参数的方法,参数为,参数为:"+s+"和" +i);  
  38.     }  
  39.   
  40.    
  41.   
  42.     / /main函数  
  43.   
  44.     public static void main(String[] args) throws Exception  
  45.     {     
  46.   
  47.                movingInvokeTest.do_test("speak",1);  
  48.     }  
  49.   
  50. }  
分享到:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多