FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Problem mit Generics.

Problem mit Generics. 2008-09-09 08:53
Farcon
import java.util.List; public class GenericTest { static Object input; public static void main(String[] args) { // - Type safety: Unchecked cast from Object to List<String> List<String> elemente = (List<String>) getInput(); } public static Object getInput() { return input; } }
Die getInput() Methode ist einem Framework so definiert, die kann nicht nicht ändern. Ich weiß genau was mir die Methode zurückliefert und möchte es hier auf eine List<String> casten, aber der Compiler beschwert sich. Mit einer instanceof Prüfung wird das Problem nur "nach unten" weitergereicht. Hat jemand eine Idee wie ich die Warnung loswerde ?

RE: Problem mit Generics. 2008-09-09 09:42
Loom
Eclipse (3.4) schlägt folgenden QuickFix vor:
Add '@SuppressWarnings("unchecked")' to 'main()'
    @SuppressWarnings("unchecked")     public static void main(String[] args) {         // - Type safety: Unchecked cast from Object to List<String>         List<String> elemente = (List<String>) getInput();     }

RE: Problem mit Generics. 2008-09-09 11:42
Fred
Die getInput() Methode ist einem Framework so definiert, die kann nicht nicht ändern.
Wieso sehen wir die Methode hier noch einmal, erbst Du vielleicht von einer Framework-Klasse und überschreibst die Methode? Dann kannst Du den Rückgabetyp auf List<String> spezialisieren (kovariante Rückgabetypanpassung).

Ansonsten gibt's keine saubere Lösung - Interaktion zwischen generischem Code und Legacy-Code ist halt hässlich (aber immerhin möglich, eins der Designziele der Java-Generics).

RE: Problem mit Generics. 2008-09-09 11:52
UncleOwen
Die getInput() Methode ist einem Framework so definiert, die kann nicht nicht ändern.
Wieso sehen wir die Methode hier noch einmal,
Weils ein Beispiel ist…

RE: Problem mit Generics. 2008-09-09 11:55
Fred
Naja es macht halt nen Unterschied, ob Farcon einfach nur ne Methode an einem anderen Objekt aufruft, ob er diese Methode erbt, oder ob er sie überschreibt. Deswegen frag ich lieber nochmal nach.

RE: Problem mit Generics. 2008-09-09 14:23
Farcon
Die getInput() Methode ist einem Framework so definiert, die kann nicht nicht ändern.
Wieso sehen wir die Methode hier noch einmal, erbst Du vielleicht von einer Framework-Klasse und überschreibst die Methode? Dann kannst Du den Rückgabetyp auf List<String> spezialisieren (kovariante Rückgabetypanpassung).

Ansonsten gibt's keine saubere Lösung - Interaktion zwischen generischem Code und Legacy-Code ist halt hässlich (aber immerhin möglich, eins der Designziele der Java-Generics).

Alles klar, dann hab ich keine offensichtliche Lösung übersehen. Dann wird es wohl ein Surpress Warning tun.