Вызов статического метода в классе?

Скажем, у меня есть ссылка на объект класса с 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().