在类上调用静态方法?

2022-09-02 11:07:58

比方说,我有一个对 Class 对象的引用,其中 SomeType 具有静态方法。有没有办法调用该方法,而不首先实例化SomeType?最好不要逃避强类型。

编辑:好吧,我搞砸了。

interface Int{
    void someMethod();
}

class ImplOne implements Int{
    public void someMethod() {
        // do something
    }
}

Class<? extends Int> getInt(){
    return ImplOne.class;
}

在这种情况下,某些Method()无论如何都不能是静态的。


答案 1

我不确定具体是什么情况,但是如果您希望在不知道类类型的情况下对类执行静态方法(即,您不知道它是SomeType,您只有Class对象),如果您知道该方法的名称和参数,则可以使用反射并执行以下操作:

Class c = getThisClassObjectFromSomewhere();

//myStaticMethod takes a Double and String as an argument
Method m = c.getMethod("myStaticMethod", Double.class, String.class);
Object result = m.invoke(null, 1.5, "foo");

答案 2

根据定义,静态方法是在类上调用的,而不是在该类的实例上调用的。

因此,如果您使用:

SomeClass.someStaticMethod()

你没有实例化任何东西(撇开类本身的类加载和实例化,JVM处理它们并且超出了你的范围)。SomeClass

这与在对象上调用的常规方法相反,该对象已被实例化:

SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();