Ich schaue mir einen GXT-Code für GWT an und bin auf diese Verwendung von Generika gestoßen, für die ich in den Java-Tutorials kein weiteres Beispiel finden kann. Der Klassenname lautet, com.extjs.gxt.ui.client.data.BaseModelData
wenn Sie den gesamten Code anzeigen möchten. Hier sind die wichtigen Teile:
private RpcMap map;
public <X> X get(String property) {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X)NestedModelUtil.getNestedValue(this, property);
}
return map == null ? null : (X) map.get(property);
}
X
wird nirgendwo anders in der Klasse oder irgendwo in der Hierarchie definiert, und wenn ich in Eclipse auf "Gehe zur Deklaration" drücke, gehe ich einfach zur <X>
Signatur in der öffentlichen Methode.
Ich habe versucht, diese Methode mit den folgenden zwei Beispielen aufzurufen, um zu sehen, was passiert:
public Date getExpiredate() {
return get("expiredate");
}
public String getSubject() {
return get("subject");
}
Sie kompilieren und zeigen keine Fehler oder Warnungen. Ich würde zumindest denken, dass ich eine Besetzung machen müsste, um dies zum Laufen zu bringen.
Bedeutet dies, dass Generika einen magischen Rückgabewert zulassen, der alles sein kann und nur zur Laufzeit explodiert? Dies scheint dem zu widersprechen, was Generika tun sollen. Kann mir jemand dies erklären und mir möglicherweise einen Link zu einer Dokumentation geben, die dies etwas besser erklärt? Ich habe das 23-seitige PDF von Sun zu Generika durchgesehen und jedes Beispiel für einen Rückgabewert wird entweder auf Klassenebene oder in einem der übergebenen Parameter definiert.