Klassen ArrayList richtig / sicher Casten?

anyUser

Mitglied
Hallo...

Ich habe mal wieder ein Problem.
Der Code läuft zwar, aber ich bekomme eine Warning und weiß nicht wie ich die richtig
bzw sauber beseitigen kann 🙁

vielleicht kann mir hier ja jmd helfen 🙂

Hier mein Code:

Java:
public void update(Observable o, Object arg) {

ArrayList<myClass> foo	 =  (ArrayList<myClass>) arg;		
		  
...
}

Die Warnung sagt nun aus, dass ich einen unsicheren Cast durchführe :/

Habe es daraufhin mit

Java:
if(arg instanceof ArrayList<?>) { ...

versucht, aber das hat die Warnung nicht beseitigt und


Java:
if(arg instanceof ArrayList<myClass>) { ...

gab einen Fehler?
 
Warum der untere Code einen Fehler ergibt, sagt ja auch direkt die Meldung. Die Typinformation besteht nur zur Compilierzeit.

Du kannst hier keinen sicheren Cast durchführen. Der sauberste Weg, die Warnung zu beseitigen, ist wohl ein
Code:
@SuppressWarnings("unchecked")
.
 
Generics ist eine Eigenschaft im Compiler, unabhängig vom Objektzustand, ist sie einmal verloren kann sie auf keine Weise wiederhergestellt werden,
das ganze ist immer unsicher

einfaches Programm:
Java:
public class Test {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();

        ArrayList<Integer> listI = list; // angenommen das ginge irgendwie sicher
        ArrayList<String> listS = list; // angenommen das ginge irgendwie sicher

        listI.add(Integer.valueOf(42));
        String x = listS.get(0); // BOOM
    }
}
selbst wenn die Listen nicht leer wären und man den Typ prüfen würde, könnte man sie danach leeren/ umfüllen und hätte irgendwann dieselbe Situation,
das Ergebnis ist eine scheinbar sichere Liste, die dann aber doch andere Objekte enthalten kann, also GAU

deshalb gibt es nur komplett saubere Verfolgung durch Compiler von Anfang bis Ende oder eben unsichere Casts, ohne jede Sicherheitsmöglichkeit
 

Zurück
Oben