使用反射来调用随机方法

时间:2013-03-05 15:28:19

标签: java reflection

我有不同类型的方法的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);

2 个答案:

答案 0 :(得分: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]);
    }

答案 1 :(得分:1)

您可以使用以下方法获取课程方法列表:

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

然后只使用Random类来获取要调用的方法的索引(随机)并从数组中获取

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

然后获取方法的参数列表并使用它来调用它

Class<?>[] params = method.getParameterTypes();