0

さまざまな種類のメソッドを持つ Java クラスがあります。一部のメソッドを呼び出すのにパラメーターは必要ありません。一部のメソッドは 1 つの文字列パラメーターを受け取り、一部は 1 つの文字列、1 つの int パラメーターなどを受け取ります。私のポイントは、最初に述べたように、さまざまな種類のメソッドがあるということです。わかりやすくするために、上にダミークラスを置きます。

パッケージ/クラス/メソッド名とリフレクション付きのパラメーターがある場合、ランダムメソッドを呼び出すことはできますか?

    package dummyPackage;

    public class DummyClass 
    {
        public DummyClass() {
        super();
        // TODO Auto-generated constructor stub
        }

        public void foo() {
            System.out.println("foo called");
        }

        public void bar(int sth) {
            System.out.println(sth++);
        }

        public void doSth(int a,String b) {
            System.out.println(a + "|" + b);
        }
...
    }

そして、以下は私が必要なものを示しています。私はJavaが初めてで、これを解決する方法がわかりません。

Object noparams[] = {};

Object[] params1 = new Object[1];
params1[0] = 100;

Object[] params2 = new Object[2];
params2[0] = 200;
params2[1] = "Test";

//What I need
NeededClass.reflect("dummyPackage.dummyClass.foo",noparams);
NeededClass.reflect("dummyPackage.dummyClass.bar",params1);
NeededClass.reflect("dummyPackage.dummyClass.doSth",params2);
4

2 に答える 2

2

これはうまくいくはずです

    Object[][] params = {{}, 
                        {1}, 
                        {1, "xxx"}};
    Method[] methods = {DummyClass.class.getMethod("foo"),
                        DummyClass.class.getMethod("bar", int.class),
                        DummyClass.class.getMethod("doSth", int.class, String.class)};
    for(int i = 0; i < 100; i++) {
        int m = new Random().nextInt(3);
        methods[m].invoke(new DummyClass(), params[m]);
    }
于 2013-03-05T15:38:14.630 に答える
1

以下を使用して、クラスのメソッドのリストを取得できます。

Method[] methods = DummyClass.class.getDeclaredMethods();

次に、Random クラスを使用して、(ランダムに) 呼び出したいメソッドのインデックスを取得し、配列から取得します。

int i = Random.nextInt(methods.length);
Method method = methods[i];

次に、メソッドのパラメーターのリストを取得し、それを使用して呼び出します

Class<?>[] params = method.getParameterTypes();
于 2013-03-05T15:38:14.700 に答える