Вызов статического метода в классе?
Скажем, у меня есть ссылка на объект класса с SomeType со статическим методом. Есть ли способ вызвать этот метод без создания экземпляра SomeType? Предпочтительно не избегать сильной типизации.
ИЗМЕНИТЬ: ОК, я испортил.
interface Int{
void someMethod();
}
class ImplOne implements Int{
public void someMethod() {
// do something
}
}
Class<? extends Int> getInt(){
return ImplOne.class;
}
В этом случае someMethod() не может быть статическим.
Ответы
Ответ 1
Статический метод, по определению, вызывается в классе, а не в экземпляре этого класса.
Итак, если вы используете:
SomeClass.someStaticMethod()
вы ничего не создаете (оставьте в стороне загрузку класса и создание экземпляра самого класса SomeClass
, который JVM обрабатывает и выходит из вашей области действия).
Это противоречит регулярному методу, вызванному для объекта, который уже был создан:
SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();
Ответ 2
Я не уверен, что это такое, но если вы хотите выполнить статический метод в классе, не зная тип класса (т.е. вы не знаете его SomeType, у вас есть только объект класса), если вы знаете имя и параметры метода, который вы могли бы использовать для отражения, и выполните следующее:
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");
Ответ 3
Поскольку вы говорите о объекте 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, ... );
Ответ 4
Да. Это то, что статические методы. Просто позвоните. SomeType.yourStaticMethodHere().