Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
DatentypenStatic methoden aus Superklasse mit Generics definieren?
public class Super<T> {
// -------------------------- STATIC METHODS --------------------------
public static <D> List<D> getAll() {
return null;
}
}
dann hab ich eine subklasse:
Java:
public class Subclass extends Super<String>{
// was anderes ...
}
Wenn ich von anderer Stelle nun folgendes aufrufe:
Java:
Subclass.getAll();
Dann möchte ich eine Liste vom Typ String haben. Geht das irgendwie?
ohne das ich es so schreiben muss:
Java:
Subclass.<String>getAll();
???
Kann man dazu iwie den typparameter benutzen, den ich beim erben von Super angegeben habe?
So eine Lösung wäre optimal, bzw eine Lösung die innerhalb der zwei klassen stattfindet und ohne das der genaue Typ in Super angegeben wird.
dank schonmal.
Es ist nicht möglich Typenparameter innerhalb eines statischen Kontextes zu benutzen. Wie soll das auch funktionieren? Hier steht das noch mal im Detail erklärt.
für welchen Einsatz brauchst du das eigentlich?
hier nochmal Zusammenfassung der Möglichkeiten
Java:
public class Test {
public static void main(String[] args) {
Sub sub = new Sub();
sub.compare(Sub.getAll()); // geht nicht
sub.compare(SuperC.getAll()); // geht nicht
List<String> list = Sub.getAll(); // geht praktischerweie immer
sub.compare(list);
list = SuperC.getAll();
sub.compare(list);
sub.compare(Sub.<String>getAll()); // sowieso
sub.compare(SuperC.<String>getAll());
}
}
class SuperC<T> {
public static <T>List<T> getAll() {
return null;
}
public void compare(List<T> l) { }
}
class Sub extends SuperC<String> {}
Das ganze bezieht sich auf webentwicklung mit gwt.
Ich habe ein model objekt, und dazu ein dao objekt auf der serverseite.
Laut der Docu für Requestfactory muss man Proxyobjekte nach abbild des jeweiligen models machen (getter, setter) (interfaces) (clientseitig). Mit diesen Proxyobjekten kann man in speziellen factory-requests funktionen für datentransfer deklarieren (interface). Dazu muss man per annotation eine klasse angeben die diese service funktionen implementiert. Allerdings geht kein implements im klassenkopf, da die factory-requests ja die proxyobjekte benutzen. Ist ja auch klar, das das nicht so einfach über client-server gehen kann ^^.
Die zu implementierenden funktionen sollen laut docu static sein. da lässt sich nun mal nichts machen.
Und da einige der funktionen in jedem factory-request gleich sind wollte ich diese auslagern und den typ variable machen.
Von daher die subklasse für spezielle implementierungen und dann die superklasse für die immer gleichbleibenden implementierungen mit dem generischen typ.
Hab das jetzt so gelöst, das die static functions im model sind (gut für merge und persist funktionen) und über das private static dao objekt auf die funktionen zugreifen. Da nur statics im model sind, klappt der generische typ im dao superobjekt wieder.