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.
Also eine Map(HashMap) hat 10 Elemente Bsp. In diesen 10 Elementen gibt es jeweils einen key,und einen value. (hier benötige ich key "main")
In dem Value befindet sich wiederum eine ArrayList und in dieser wiederum eine LinkedList, da benötige ich den key "description"
Okay nochmal: Hab es nun etwas vereinfacht.
Ich habe eine Arraylist "a" auf dem [0] Eintrag dieser ArrayList (mehr gibt es dort noch nicht) befindet sich eine LinkedTreeMap und diese LinkedTreeMap hat 4 Eintrage und im zweiten Eintrag [2] befindet sich der key "XXX". Diesen möchte ich auslesen um den Value zu erhalten.
So habe es nun geschafft, aber leider nur mit casts. Wie kann ich die Casts noch weglassen:
Java:
ArrayList<V> liste = (ArrayList<V>) respMap.get("weather");
LinkedTreeMap<K,V> link = (LinkedTreeMap<K,V>) liste.get(0);
V wert= link.get("description");
Prinzipiell weiß ich dass ich anstatt K,V String oder so schreiben muss, aber ich kann doch die komplette Klasse auch als generics machen und dann kann ich mein K,V doch so stehen lassen oder?
Klar, die Frage ist aber, wo die beiden Typen Verwendung finden.
Nehmen wir mal folgendes an: ich habe verschiedene Sensorgruppen, die sich z. B. per String identifizieren lassen. In jeder dieser Gruppe gibt es eine Liste von Sensoren, die mir zu einem Schlüssel vom Typ K einen Wert vom Typ V liefern.
Prinzipiell weiß ich dass ich anstatt K,V String oder so schreiben muss, aber ich kann doch die komplette Klasse auch als generics machen und dann kann ich mein K,V doch so stehen lassen oder?
Du kannst natürlich eine generische Klasse schreiben. Die Frage ist, ob das in deinem Fall sinnvoll ist. Hast du denn tatsächlich wechselnde Datentypen, sprich verwendest du deine Klasse mehrfach mit unterschiedlichen Schlüsseln/Typen?
Klar, die Frage ist aber, wo die beiden Typen Verwendung finden.
Nehmen wir mal folgendes an: ich habe verschiedene Sensorgruppen, die sich z. B. per String identifizieren lassen. In jeder dieser Gruppe gibt es eine Liste von Sensoren, die mir zu einem Schlüssel vom Typ K einen Wert vom Typ V liefern.
Der klare Fall: respMap.get("weather") liefert seiner Deklaration von respMap nach ein Object, kann daher auf alles gecastet werden.
Ob der zweite Cast funktioniert, hängt von der Deklaration der Typvariablen V ab. Wurde keine "obere Grenze" angegeben, gilt implizit "V extends Object". Somit liefert liste.get(0) eine Instanz eines von Object abgeleiteten Typs. Daher ist der downcast auf LinkedTreeMap zur zulässig.