Hab mir heut paar Artikel zu Generics durchgelesen. Verstehe das Grundprinzip auch einigermaßen. Damit ich gleich was zum Üben hab, hab ich mir vorgenommen eine CaseInsensitiveMap<K, V> zu schreiben, allerdings haperts dann doch noch gewaltig ;-).
Hat vll. jemand ein paar passende Beispiele zu Generics (kann auch einfacher sein als eine Custom-Map Implementierung)? Wenn ich zB nach "Java Generics" oder "Generic Map Example" google finde ich hauptsächlich Beispiele wie man simple Maps/Lists benutzt. Wie man diese Benutzt weiss ich, nur wie man eine selber schreibt wär schon interessanter.
Ja du hast recht, alle Objekte die ich in der Map speichern muss haben allerdings eine .getName() Methode. Ich hätte das dann intern irgendwie mit o1.getName().equalsIgnoreCase() gemacht. Wenn ich
CaseInsensitiveMap<String, V> mach, dann bekomme ich die Warnung "The type parameter String is hiding the type String" (Eclipse).
Schreib Dir doch eine Zwischenschicht (Klasse oder Methoden) zum Zugriff auf die Map. Bei den eigentlichen Zugriffen verwendest du dann immer komplett Groß-/ oder Kleingeschriebene Id's (toUpperCase/toLowerCase), schon hast Du eine case-insensitive Map intern, ohne viel zu machen
Schreib Dir doch eine Zwischenschicht (Klasse oder Methoden) zum Zugriff auf die Map. Bei den eigentlichen Zugriffen verwendest du dann immer komplett Groß-/ oder Kleingeschriebene Id's (toUpperCase/toLowerCase), schon hast Du eine case-insensitive Map intern, ohne viel zu machen
Ich glaube er wollte bissle Generics üben, nicht lernen wie man eine Map schreibt.
@Sh:
Naja, der Fehler sollte klar sein. Meißtens nimmt man für einen generischen Typen nur einen Buchstaben, aber man muss nicht. Du hast nun anstatt einfach K auch String genommen. Allerdings ist String schon ein reservierter Name. Wenn der eine Typ schon festgelegt ist, dann lass ihn weg. Das einzige was du machen könntest, wäre:
Java:
CaseInsensitiveMap<KextendsString,V>
Damit kann nun nur ein Typ für K gewählt werden, der von String erbt. Macht aber nach deinem Beispiel wenig sinn, also belass es bei
Java:
CaseInsensitiveMap<V>
Um nochmal auf den Fehler zurück zu kehren, stell dir mal vor dein Code sieht so aus:
Ah alles klar. Ich dachte ich muss den 2. Typ auch übergeben, selbst wenn es ein vordefinierter ist. Also einfach weglassen, ich werds dann gleich mal probieren!