Java动态调用方法
?一直想學(xué)如何動(dòng)態(tài)調(diào)用方法,今天終于看了一下。。
public void function(String str)
{
????? / /根據(jù) str的值 調(diào)用相應(yīng)的方法
}
public void test()
{
???? / /code
}
如str的值為test,就調(diào)用test方法
?
主要用到j(luò)ava反射機(jī)制,Class和Method這些類。
?
動(dòng)態(tài)調(diào)用的方法:a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{})
其中,a為類的對(duì)象,str為要被調(diào)用的方法名
1、a.getClass()得到a.class 對(duì)象
2、getMethod(str, new Class[]{})得到a對(duì)象中名為str的不帶參數(shù)的方法。。。
????? 如果str方法帶參數(shù)如str(String s, int i),就要這樣寫getMethod(str, new Class[]{String.class,int.class})
3、invoke(a,new Object[]{})調(diào)用方法,第一個(gè)參數(shù)是要調(diào)用這個(gè)方法的對(duì)象,如果方法是static的,這個(gè)參數(shù)可以為null
????? 如果調(diào)用有參數(shù)的方法str(String s, int i),應(yīng)該這樣寫invoke(a,new Object[]{"jimmy", 1})
?
下面是代碼,幫助理解
public class MovingInvokeTest
{
??? private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest();??? / /創(chuàng)建MovingInvokeTest對(duì)象
????public void do_test(String str,int i) throws Exception???????????????????????????????????????????????? / /根據(jù)str字符串調(diào)用方法,變量i只是為了判斷
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????/ /調(diào)用有幾個(gè)參數(shù)的方法
??? {
????? if(i == 0)?????????????????? / /調(diào)用沒有參數(shù)的方法
?????? movingInvokeTest.getClass().getMethod(str, new Class[]{}).invoke(movingInvokeTest, new Object[]{});
????? else if(i == 1)??????????? / /調(diào)用有一個(gè)參數(shù)的方法,參數(shù)為String類型的s
?????? movingInvokeTest.getClass().getMethod(str, new Class[]{String.class}).invoke(movingInvokeTest, new Object[]{"s"});
????? else if(i == 2)?????????? / / /調(diào)用有兩個(gè)參數(shù)的方法 參數(shù)分別為String類型的qw和int型的1
?????? movingInvokeTest.getClass().getMethod(str, new Class[]{String.class,int.class}).invoke(movingInvokeTest, new Object[]{"qw",1});
??? }
? /*
?? * 下面是3個(gè)方法
?? */
??? public void speak()
? {
???????? System.out.println("調(diào)用的沒有參數(shù)的方法");
? }
??? public void speak(String s)
??? {
?????? System.out.println("調(diào)用有一個(gè)參數(shù)的方法,參數(shù)為:"+s);
??? }
??? public void speak(String s,int i)
??? {
??????? System.out.println("調(diào)用有兩個(gè)參數(shù)的方法,參數(shù)為,參數(shù)為:"+s+"和" +i);
??? }
?
??? / /main函數(shù)
??? public static void main(String[] args) throws Exception
??? {???
?????????????? movingInvokeTest.do_test("speak",1);
??? }
}
總結(jié)
以上是生活随笔為你收集整理的Java动态调用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA深入研究——Method的Inv
- 下一篇: 吃透Java中的动态代理