Vorwort:Ich verstehe Generika und wie sie auf der Klassenebene (z class MyClass<T>
) erklärt, aber ich habe es nie auf der Ebene einer statischen Methode deklariert gesehen, und ohne explizite Bindungen (z class MySubclass<String> extends MyClass
).Was ist eine generische Methode und wie ist <T> in diesem Fall gebunden?
Ich habe dieses Code-Snippet in einer App gefunden, an der ich gerade arbeite (diesen Teil habe ich nicht geschrieben). Ich habe noch nie eine so erklärte Methode gesehen. <T>
ist nicht irgendwo anders in der Klasse definiert. Intent.getExtras().get()
gibt eine Object
zurück, die tatsächlich eine String
, ... usw. sein kann.
private static <T> T getItemExtra(final Intent intent, final String extraName) {
T item = null;
if(intent != null && intent.getExtras() != null) {
item = (T) intent.getExtras().get(extraName);
}
return item;
}
Verwendungsbeispiel:
String s1 = getItemExtra(someIntent, "some_string_extra");
Uri u1 = getItemExtra(someIntent, "some_uri_extra");
Wie funktioniert die JVM wissen, welche Art für <T>
zu benutzen? (Ja, diese Methode wird kompiliert und erfolgreich ausgeführt).
Nicht entfernt ein Dup der anderen Frage. –
@Nilish Ich frage nach generischen Methoden, nicht nach generischen Klassen. Ich habe die Frage aktualisiert, um dies zu berücksichtigen. –
@ OliverGondža Ja ich muss zugeben, das ist ein Duplikat. –