通过一个方法名字符串,来调用该名字如何实现?
例如,已知Class为Test,其中有方法setTax,参数为String tax; 怎么在程序中通过方法名及参数自动调用这个方法!!

解决方案 »

  1.   

    Class CC = Class.forName("Test");
    Method method = CC.getDeclaredMethod("setTax",null);
    Class ptypes[] = new Class[1]; 
    ptypes[0] = Class.forName("java.lang.String"); 
    method.invoke((Test)CC.newInstance(),ptypes);
      

  2.   

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;public class TestReflect {    public static void main(String arg[]) {
            try {
                // クラスオブジェクトをインスタンスする
                Object test = Class.forName("Test").newInstance();
                // setTaxメソッドの引数
                Class[] argc = { java.lang.String.class };
                // setTaxメソッドオブジェクトを取得
                Method meth = test.getClass().getMethod("setTax", argc);
                // 引数値
                Object[] argx = { "setTax メソッドテスト" };
                meth.invoke(test, argx);            
                // -----------取得処理-----------
                Method getMeth = test.getClass().getMethod("getTax", null);
                Object objReturn = getMeth.invoke(test, null);
                System.out.println("---先設定された値は:--" + objReturn);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    Test.java
    public class Test {
        private String wg_tax = null;
        
        /**
         * ディフォルトコンストラクタ
         */
        public Test() {        
        }
        
        /**
         * taxをセットする
         * @param _tax
         */
        public void setTax(String _tax) {
            this.wg_tax = _tax;
        }
        
        /**
         * taxを返却する
         * @return
         */
        public String getTax() {
            return this.wg_tax;
        }
    }