Pregunta

Say, tengo una referencia a un objeto de clase con SomeType tener un método estático. ¿Hay una manera de llamar a ese método w / o crear instancias de SomeType primero? Preferiblemente no se escape fuerte a escribir.

EDIT:. OK, he jodido

interface Int{
    void someMethod();
}

class ImplOne implements Int{
    public void someMethod() {
        // do something
    }
}

Class<? extends Int> getInt(){
    return ImplOne.class;
}

En este caso algunMetodo () no puede ser estática de todos modos.

¿Fue útil?

Solución

un método estático, por definición, se llama en una clase y no en una instancia de esa clase.

Así que si usa:

SomeClass.someStaticMethod()

que está instanciar nada (dejar de lado la carga de clases y la creación de instancias de la propia clase SomeClass, que se encarga de la JVM y está fuera de su alcance).

Esto se opone a un método regular llamada en un objeto, que ya ha sido instanciado:

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

Otros consejos

No estoy seguro exactamente cuál es la situación, pero si usted está buscando para ejecutar el método estático de una clase sin conocer el tipo de clase (es decir, no sé que es SomeType, sólo tiene el objeto de clase) , si se conoce el nombre y los parámetros del método se podría utilizar la reflexión y hacer esto:

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

Desde que se habla de un objeto de clase, supongo que usted está interesado en la reflexión de Java. He aquí una breve fragmento que hace lo que estamos tratando de hacer:

Class someClass = SomeType.class;
Method staticMethod = someClass.getMethod( "methodName", ... );

// pass the first arg as null to invoke a static method
staticMethod.invoke( null, ... );

Sí. Eso es lo que los métodos estáticos se trata. Sólo tiene que llamar ella. SomeType.yourStaticMethodHere ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top