使用反射调用静态方法

时间:2010-03-18 04:33:58

标签: java reflection static

我想调用静态的main方法。我得到了Class类型的对象,但我无法创建该类的实例,也无法调用static方法main

4 个答案:

答案 0 :(得分:254)

// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");

如果该方法是私人使用getDeclaredMethod()而不是getMethod()。并在方法对象上调用setAccessible(true)

答案 1 :(得分:40)

来自Method.invoke()的Javadoc:

如果底层方法是静态的,则忽略指定的obj参数。它可能是null。

当你

时会发生什么
Class klass = ...;
Method m = klass.getDeclaredMethod(methodName, paramtypes);
m.invoke(null, args)

答案 2 :(得分:9)

String methodName= "...";
String[] args = {};

Method[] methods = clazz.getMethods();
for (Method m : methods) {
    if (methodName.equals(m.getName())) {
        // for static methods we can use null as instance of class
        m.invoke(null, new Object[] {args});
        break;
    }
}

答案 3 :(得分:3)

public class Add {
    static int add(int a, int b){
        return (a+b);
    }
}

在上面的示例中,“ add”是一个静态方法,它使用两个整数作为参数。

以下代码段用于通过输入1和2调用“ add”方法。

Class myClass = Class.forName("Add");
Method method = myClass.getDeclaredMethod("add", int.class, int.class);
Object result = method.invoke(null, 1, 2);

参考link