Cast ohne Warnung bei Generics

A.T.

Bekanntes Mitglied
Hallo zusammen,

ich habe eine Frage zum Gasten im zusammen hang mit Generics.

Meine Methode erhält eine Map<String, Object> in dieser Map befinden sich verschiedene Objekte. Z.B. Strings, ArrayList<String>, ArrayList<Color> usw.
Um die ArrayLists geht es. Wenn ich diese jetzt aus der Map heraushole und einer ArrayList vom entsprechenden Typ zuweisen möchte, bekomme ich immer eine Warnung. Wie caste ich an der Stelle richtig?

Beispiel:
Java:
public void methode(Map<String, Object> data){

  ArrayList arryList;
  if (data.containsKey("keyX")
				&& data.get("keyX") instanceof ArrayList) {
    arrayList = (ArrayList<String>)data.get("keyX")
  }
  ...
}
In Zeile 6 erhalte ich jetzt immer die Warnung hier: Type safety: The cast from Object to ArrayList<String> is actually checking against the erased type ArrayList

Eine Überprüfung mit instanceof gegen ArrayList<String> geht aber nicht.

Wie löst man dieses Problem am besten?

Danke schon mal!

Gruß
A.T.
 
deine Liste
> ArrayList arryList;
ist nicht generisch typisiert, wozu dann überhaupt generisch casten?

grundsätzlich ist dies aber nicht möglich, man kann nur nur auf die Klasse casten,
generische Parameter beim Cast haben höchstens kommentierende Wirkung, sonst ganz weglassen

Java:
public class Test {
    public static void main(String[] args) {
        Object o = null;

        @SuppressWarnings("unchecked")
        List<String> l = (List)o;

        l = (List)o;
    }
}
nur noch @SuppressWarnings("unchecked") hilft gegen die Warning,
bei Deklaration einer neuen Variablen kann man es in die Zeile davor schreiben, ansonsten muss es an die Methode oder an die Klasse ran und gilt dann für einen ganzen Bereich, etwas gefährlich
 
Zuletzt bearbeitet von einem Moderator:
Danke für die sehr schnelle Antwort!

Du hast natürlich Recht, im meinem Beispiel macht das nicht viel Sinn.
Statt ArrayList arryList; sollte da natürlich ArrayList<String> arryList; stehen. Habe den Code nur eben schnell ins Forum geschrieben.

Schade, habe gehofft es würde eine elegante Lösung geben. Dann weiß ich jetzt aber bescheid.
Noch mal vielen Dank!
 

Neue Themen


Zurück
Oben