2013-04-20 14 views
8

Ich wurde durch den Code des Gehens commons-chainSchlüsselwort extends in Rückgabetyp in Java-Methodensignatur

ich viele Methodensignaturen fanden diese ähnelt ein:

public <CMD extends Command<K, V, C>> CMD getCommand(String commandID)

Wie ist diese Signatur irgendwie anders von:

public Command getCommand(String commandID)

Die einzige logische Grund i könnte verstehen, dass es eine Typüberprüfung gab. aber ich konnte immer noch nicht den Grund herausfinden, dies aus Sicht des Designs zu tun.

Gibt es einige weitere Gründe, warum man verwenden würde und erweitert im Gegenzug Art einer Java-Methode?

Antwort

4

Der Unterschied ist dreifach:

  1. Der zurück Typ ist getippt (kein rohes Typ)
  2. Die Art eine
  3. spezifische Unterklasse zurückgeführt werden kann
  4. Verfahren Zugang zu den Typen hat K, V und C

und eine typisierte Methode zu sein, java den Typ ableiten kann

All dies bedeutet, dass diese (ohne Abgüsse) kompiliert:

Command<String, Integer, String> x = getCommand(commandID); 

oder

SomeTypedSubClassOfCommand x = getCommand(commandID); 

Der Compiler wird ableiten (dh herauszufinden), um den Typ für das Verfahren, basierend auf der Art der variablen Das Ergebnis wird zugewiesen.

Weiterhin können Sie explizit eine Unterklasse mit dieser Syntax angeben:

Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID); 
+0

Dank. nur die Klärung, die ich suchte. – shoubhik