Überschriebene Methode eines generischen Typen aufrufen

  • Themenstarter Themenstarter schnerbert
  • Beginndatum Beginndatum
S

schnerbert

Gast
Ich habe eine Klasse BaseType, die eine statische Methode definiert. Die Klasse SubType erbt von BaseType und überschreibt diese statische Methode:

Java:
class BaseType {
  static void staticMethod() {
    System.out.println("BaseType");
  }
}

class SubType extends BaseType {
  static void staticMethod() {
    System.out.println("SubType");
  }
}

Bei dem generischen Aufruf T.staticMethod() im folgenden Programm möchte ich die staticMethod-Implementation von SubType aufrufen und nicht die von BaseType:

Java:
class Main {
  public static void main(String[] args) {
    doSomething(SubType.class);
  }

  static <T extends BaseType> void doSomething(Class<T> type) {
    T.staticMethod(); // Hier wird die staticMethod-Implementation von BaseType aufgerufen. Wie kann ich die staticMethod-Implementation von SubType aufrufen?
  }
}
 
Reflection scheint die Antwort zu sein. Meiner Meinung nach müsste das hier funktionieren, tut es aber nicht:

Java:
  static <T extends BaseType> void doSomething(Class<T> type) {
    try {
      Method staticMethod = type.getMethod("staticMethod");
      staticMethod.invoke(null);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

Das resultiert im Laufzeitfehler:
java.lang.NoSuchMethodException: SubType.staticMethod()

Die existiert doch offensichtlich?
 
API lesen kommt nicht in Frage?

public Method getMethod

Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object.
member steht für nicht-statisch glaube ich, genau ausprobieren,
public ist auf jeden Fall ein Killer bei dir,

aber gibt ja noch andere Methoden in Class
 

Zurück
Oben