Statische Methode für eine Klasse aufrufen?

Angenommen, ich habe einen Verweis auf ein Class-Objekt mit SomeType mit einer statischen Methode. Gibt es eine Möglichkeit, diese Methode w/o instanziieren SomeType zuerst aufzurufen? Am besten nicht entkommen starke Tippen.

EDIT: OK, ich habe geschraubt.

interface Int{
    void someMethod();
}

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

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

In diesem Fall kann someMethod() ohnehin nicht statisch sein.

Antwort auf "Statische Methode für eine Klasse aufrufen? " 4 von antworten

Ich bin mir nicht sicher, wie die Situation genau ist, aber wenn Sie die statische Methode für eine Klasse ausführen möchten, ohne den Klassentyp zu kennen (d. h. Sie wissen nicht, dass es SomeType ist, haben Sie nur das Class-Objekt), wenn Sie den Namen und die Parameter der Methode kennen, können Sie Reflektion verwenden und dies tun:

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

Eine statische Methode wird definitionsgemäß für eine Klasse und nicht für eine Instanz dieser Klasse aufgerufen.

Wenn Sie also verwenden:

SomeClass.someStaticMethod()

instanziieren Sie nichts (lassen Sie die Klassenbeladung und Instanziierung der SomeClass class itself, which the JVM handles and is way out of your scope). Klasse selbst beiseite, die die JVM handhabt und weit a-d aus Ihrem Bereich entfernt ist).

Dies steht im Gegensatz zu einer regulären Methode, die auf ein Objekt angewendet wird, das bereits instanziiert wurde:

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

Ja. Darum geht es bei statischen Methoden. Nennen Sie es einfach. SomeType.yourStaticMethodHere().

Da Sie über ein Class-Objekt sprechen, nehme ich an, dass Sie an Java-Reflektion interessiert sind. Hier ist ein kurzer Ausschnitt, der tut, was Sie versuchen zu tun:

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

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