Chamar método estático em uma classe?
-
09-09-2019 - |
Pergunta
Say, eu tenho uma referência a um objeto de classe com SomeType ter um método estático. Existe uma maneira de chamar esse método w / o instantiating SomeType primeiro? De preferência, não escapando tipagem forte.
EDIT: Ok., Eu estraguei tudo
interface Int{
void someMethod();
}
class ImplOne implements Int{
public void someMethod() {
// do something
}
}
Class<? extends Int> getInt(){
return ImplOne.class;
}
Neste caso someMethod () não pode ser estática de qualquer maneira.
Solução
Um método estático, por definição, é chamado em uma classe e não em uma instância dessa classe.
Então, se você usar:
SomeClass.someStaticMethod()
você está instanciar nada (deixar de lado o carregamento de classe e instanciação da própria classe SomeClass
, que as alças de JVM e é maneira fora de seu escopo).
Isto é o oposto a um método regular chamado em um objeto, que já foi instanciado:
SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();
Outras dicas
Eu não sei exatamente qual é a situação, mas se você estiver olhando para executar o método estático em uma classe sem saber o tipo de classe (ou seja, você não sabe que é SomeType, você só tem o objeto de classe) , se você sabe o nome e os parâmetros do método que você pode usar a reflexão e fazer isso:
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");
Uma vez que você fala sobre um objeto de classe, presumo que você estiver interessado em reflexão Java. Aqui está um breve trecho que faz o que você está tentando fazer:
Class someClass = SomeType.class;
Method staticMethod = someClass.getMethod( "methodName", ... );
// pass the first arg as null to invoke a static method
staticMethod.invoke( null, ... );
Sim. Isso é o que métodos estáticos são tudo. Basta ligar para ele. SomeType.yourStaticMethodHere ().