从不同的类动态调用方法

时间:2015-03-14 14:08:04

标签: java

我有一个要求,我需要在一个特定模式中从类调用方法,该模式作为输入参数获得。

   public RandomMethod(String ClassName){
        //Eg For Class Name Abc , there is a method AbcProcessor which i need to invoke
        ClassName.ClassNameProcessor    
        }

由于我将参数作为String获取,我无法弄清楚如何将String转换为一种形式,我可以调用类似 Abc.AbcProcessor()

的形式

我相信有一些方法可以使用反射来做到这一点。但我不知道该怎么办。

2 个答案:

答案 0 :(得分:1)

您需要使用reflecton,确实

public void randomMethod(String fullyQualifiedClassName, String methodName) throws ReflectiveOperationException {
    Class<?> clazz = Class.forName(fullyQualifiedClassName);

    clazz.getMethod(methodName).invoke(null);
}

假设您正在调用没有参数的公共静态方法

,这将起作用

答案 1 :(得分:1)

通过反思,您可以这样做,请尝试以下示例:

A类:

public class A {
    public void print(){
        System.out.println("A");
    }
}

B组:

public class B {
    public void print(){
        System.out.println("B");
    }    
}

从A和B调用print()

public class Test {

    public static void callPrint(String className){
        try {
            Class clazz = Class.forName(className);
            Object obj = clazz.newInstance();
            clazz.getDeclaredMethod("print").invoke(obj);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        callPrint("test.A");
        callPrint("test.B");
    }
}