如何通过类引用访问静态方法

2022-09-02 02:42:05
class A {
    public static void foo() {}
}

class B {
    public static void foo() {}
}

我有Class clazz = A.class; or B.class;

我如何通过“clazz”访问它,假设它可能被分配为“A”或“B”


答案 1

只能使用反射来访问这些方法。不能直接引用类,只能引用 Class 类型的实例。

使用反射调用方法名(int a, String b):

Method m = clazz.getMethod("methodname", Integer.class, String.class);
m.invoke(null, 1, "Hello World!");

请参阅 Class.getMethod()Method.invoke()

您可能需要再次考虑您的设计,以避免动态调用静态方法的需要。


答案 2

您可以通过反射调用静态方法,如下所示:

Method method = clazz.getMethod("methodname", argstype);
Object o = method.invoke(null, args);

其中 argstype 是参数类型的数组,args 是调用的参数数组。有关以下链接的更多信息:

在你的情况下,这样的东西应该有效:

Method method = clazz.getMethod("foo", null);
method.invoke(null, null); // foo returns nothing