Java 使用反射调用随机方法

Java 使用反射调用随机方法,java,reflection,Java,Reflection,我有不同方法的java类。调用某些方法不需要参数。有些方法采用1个字符串参数,有些方法采用1个字符串、1个int参数等等。我的观点是,正如我在开始时所说的,有不同类型的方法。我在上面放置了一个虚拟类,以便更容易理解 如果我有包/类/方法名和带有反射的参数,是否可以调用random方法 package dummyPackage; public class DummyClass { public DummyClass() { super()

我有不同方法的java类。调用某些方法不需要参数。有些方法采用1个字符串参数,有些方法采用1个字符串、1个int参数等等。我的观点是,正如我在开始时所说的,有不同类型的方法。我在上面放置了一个虚拟类,以便更容易理解

如果我有包/类/方法名和带有反射的参数,是否可以调用random方法

    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);
这应该行得通

    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]);
    }
Object[][]参数={{{},
{1}, 
{1,“xxx”};
Method[]methods={DummyClass.class.getMethod(“foo”),
DummyClass.class.getMethod(“bar”,int.class),
DummyClass.class.getMethod(“doSth”,int.class,String.class)};
对于(int i=0;i<100;i++){
int m=new Random().nextInt(3);
方法[m].invoke(新的DummyClass(),参数[m]);
}
这应该行得通

    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]);
    }
Object[][]参数={{{},
{1}, 
{1,“xxx”};
Method[]methods={DummyClass.class.getMethod(“foo”),
DummyClass.class.getMethod(“bar”,int.class),
DummyClass.class.getMethod(“doSth”,int.class,String.class)};
对于(int i=0;i<100;i++){
int m=new Random().nextInt(3);
方法[m].invoke(新的DummyClass(),参数[m]);
}

您可以使用以下方法获取类的方法列表:

Method[] methods = DummyClass.class.getDeclaredMethods();
然后,只需使用Random类获取要调用(随机)的方法的索引,并从数组中获取它

int i = Random.nextInt(methods.length);
Method method = methods[i];
然后获取方法的参数列表并使用它调用它

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

您可以使用以下方法获取类的方法列表:

Method[] methods = DummyClass.class.getDeclaredMethods();
然后,只需使用Random类获取要调用(随机)的方法的索引,并从数组中获取它

int i = Random.nextInt(methods.length);
Method method = methods[i];
然后获取方法的参数列表并使用它调用它

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

但是,如果我不知道调用方法的顺序怎么办?正如我提到的,有很多方法和很多类。在这种情况下,您不是“随机”调用方法。不管怎样,谢谢。嗯,我手动创建方法和参数,这是真的。但是方法是随机调用的,m是介于0和2Oh之间的随机索引。对不起,我的第一个答案。我才意识到你在做我真正需要的事情!谢谢但是,如果我不知道被调用方法的顺序呢?正如我提到的,有很多方法和很多类。在这种情况下,您不是“随机”调用方法。不管怎样,谢谢。嗯,我手动创建方法和参数,这是真的。但是方法是随机调用的,m是介于0和2Oh之间的随机索引。对不起,我的第一个答案。我才意识到你在做我真正需要的事情!谢谢