在类上调用静态方法?

比如说,我引用了一个具有静态方法的SomeType的Class对象。 有没有办法调用该方法无需首先实例化SomeType? 最好不要逃避强打字。

编辑:好的,我搞砸了。

interface Int{ void someMethod(); } class ImplOne implements Int{ public void someMethod() { // do something } } Class getInt(){ return ImplOne.class; } 

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

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

所以如果你使用:

 SomeClass.someStaticMethod() 

你实际上没有实例化(抛开SomeClass类本身的类加载和实例化,JVM处理它并超出你的范围)。

这与已经实例化的对象调用的常规方法相反:

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

我不确定情况究竟是什么,但如果你想在不知道类类型的情况下在类上执行静态方法(即你不知道它是SomeType,你只需要Class对象),如果你知道你可以使用reflection的方法的名称和参数,并执行以下操作:

 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"); 

既然你谈到了Class对象,我假设你对Javareflection很感兴趣。 这是一个简短的片段,可以完成您要做的事情:

 Class someClass = SomeType.class; Method staticMethod = someClass.getMethod( "methodName", ... ); // pass the first arg as null to invoke a static method staticMethod.invoke( null, ... ); 

是。 这就是静态方法的全部意义所在。 打电话吧。 SomeType.yourStaticMethodHere()。