说,我有一个Class对象的引用,SomeType有一个静态方法。有没有办法调用该方法无需首先实例化SomeType?最好不要逃避强打字。
编辑:好的,我搞砸了。interface Int{
void someMethod();
}
class ImplOne implements Int{
public void someMethod() {
// do something
}
}
Class<? extends Int> getInt(){
return ImplOne.class;
}
在这种情况下,someMethod()无论如何都不能是静态的。
答案 0 :(得分:30)
我不确定情况究竟是什么,但是如果你想在不知道类类型的情况下在类上执行静态方法(即你不知道它是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");
答案 1 :(得分:23)
根据定义,静态方法在类上调用,而不是在该类的实例上调用。
所以如果你使用:
SomeClass.someStaticMethod()
你没有实例化任何东西(不要把SomeClass
类本身的类加载和实例化放在一边,JVM处理它并超出你的范围。)
这与在对象上调用的常规方法相反,该方法已经实例化:
SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();
答案 2 :(得分:12)
既然你谈到了一个Class对象,我认为你对Java反射很感兴趣。这是一个简短的片段,可以完成您要做的事情:
Class someClass = SomeType.class;
Method staticMethod = someClass.getMethod( "methodName", ... );
// pass the first arg as null to invoke a static method
staticMethod.invoke( null, ... );
答案 3 :(得分:-1)
是。这就是静态方法的全部意义所在。打电话吧。 SomeType.yourStaticMethodHere()。