Wie "unchecked cast" hier vermeiden?

Dingels

Mitglied
Schönen guten Abend,

seitdem ich Java jetzt so nach und nach kennenlerne, fallen mir doch einige Dinge an der Sprache auf, die ich nicht besonders schön finde. Ich meine hier vor allem das oftmals unsichere Casting von Typen.

Dabei hat sich jetzt ein Problem aufgetan:
Beim Schreiben eines Parsers für ein syntaktisch annotiertes Korpus verwende ich verschachtelte ArrayLists, die alle in einem Stack liegen. Die anfängliche Struktur sieht z.B. so aus:

Code:
[ [S, [] ], [NP, [] ], [VP, [] ] ]

Ich habe ein Stack, in dem mehrere ArrayLists liegen. Jede ArrayList beinhaltet genau zwei Elemente: einen String (wie S, NP, VP) und eine weitere ArrayList. Jetzt tritt manchmal der Fall ein, dass ich die hinterste ArrayList vom Stack nehmen muss und sie in die innere ArrayList der ArrayList davor einsortieren muss. Wenn ich das in diesem Beispiel tue, sieht die Struktur folgendermaßen aus:

Code:
[ [S, [] ], [NP, [[VP, []] ] ] ]

Der entsprechende Java-Code sieht folgendermaßen aus:

Java:
// Initialisieren des Stacks
Stack<ArrayList<Object>> stack = new Stack<ArrayList<Object>>();
// Hier wird das letzte Element vom Stack genommen und in die innere ArrayList des vorherigen Elementes eingesetzt
ArrayList<Object> lastNode = stack.pop();
((ArrayList<Object>) stack.lastElement().get(1)).add(lastNode);

Das Problem ist, wie in Zeile 5 zu sehen, dass ich ein Type Casting machen muss, weil der Compiler nur weiß, dass es sich um ein
Code:
Object
handelt, aber nicht, dass es in Wirklichkeit eine ArrayList ist. Demzufolge ist das Casting unsicher und ich erhalte vom Compiler eine entsprechende Warnung:

Unchecked cast: ' java.lang.Object ' to ' java.util.ArrayList<java.lang.Object>'

Frage: Mir ist klar, dass ich die Warnung explizit unterdrücken könnte, aber schön ist das nicht. Habt ihr eine Idee, wie ich das ganze anders programmieren könnte, um nicht solch ein unschönes Type Casting machen zu müssen? Ich habe nämlich gerade keinen Einfall für eine Alternative. Gibt es vielleicht die Möglichkeit mit Hilfe von Generics, die Typen explizit festzulegen (also etwa <String, ArrayList>)?

Herzlichen Dank! :)
 
Zuletzt bearbeitet:

HoaX

Top Contributor
Nutze doch einfach passende Datenstrukturen? String und Liste gehören ja zusammen, also erstelle z.B. eine Klasse Item welche als Attribute den String und eine ArrayList<Item> hat. Und dein Stack ist dann vom Typ Stack<Item>.
 
Zuletzt bearbeitet:

Dingels

Mitglied
Nutze doch einfach passende Datenstrukturen? String und Liste gehören ja zusammen, also erstelle z.B. eine Klasse Item welche als Attribute den String und eine ArrayList<Item> hat. Und dein Stack ist dann vom Typ Stack<Item>.

Ach ja, richtig. Das wäre durchaus ne Möglichkeit. Ich teste das mal. Danke! :)
Ich bin halt noch nicht so geübt darin, in Typen zu denken. Wenn man wie ich von dynamischen Sprachen wie Python und Perl kommt, dauert das Umdenken halt ne Weile. :oops:

EDIT: OK, hat geklappt. ;) Nochmals danke.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
O unchecked Exception Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
R Note: uses unchecked or unsafe operations Java Basics - Anfänger-Themen 4
B Datentypen Casts typesafe machen? ("unchecked") Java Basics - Anfänger-Themen 10
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
H Warning: unchecked Java Basics - Anfänger-Themen 5
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
S ArrayList<Element> - "unchecked or unsafe operati Java Basics - Anfänger-Themen 13
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
C Unchecked Call? Wie Warnung beseitigen? Java Basics - Anfänger-Themen 3
G Frage zu: @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 4
T "Unchecked or unsave Opertions"-Fehler beseitigen Java Basics - Anfänger-Themen 16
G hashtable und unsafe, unchecked Code Java Basics - Anfänger-Themen 3
S Fehlermeldung: uses unchecked or unsafe operations ? Java Basics - Anfänger-Themen 6
D Vector - unchecked Java Basics - Anfänger-Themen 8
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
O Cast Java Basics - Anfänger-Themen 16
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
N Simpler cast? Java Basics - Anfänger-Themen 9
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
A Ohne Cast auf Methode zugreifen? Java Basics - Anfänger-Themen 4
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
K Cast bei equals Java Basics - Anfänger-Themen 2
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
R Variablen Möglich?: Cast einer Referenzvariable auf den Typ seines Objektes Java Basics - Anfänger-Themen 19
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
M ListIterator + Cast Java Basics - Anfänger-Themen 12
M Cast nach int Java Basics - Anfänger-Themen 8
M object cast auf double Java Basics - Anfänger-Themen 2
I double (cast) rundungsproblem Java Basics - Anfänger-Themen 8
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
L Type/Cast Problem Java Basics - Anfänger-Themen 6
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
M Collections Cast bei ArrayList (List) Java Basics - Anfänger-Themen 2
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
C Generics und Cast Java Basics - Anfänger-Themen 5
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
J cast zu int immer 0.. Java Basics - Anfänger-Themen 6
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
M Cast vermeiden Java Basics - Anfänger-Themen 11
B Exception cast to CORBA.Object Java Basics - Anfänger-Themen 2
K Cast-Operator Java Basics - Anfänger-Themen 3
Guybrush Threepwood Inhalt eines Strings für cast verwenden Java Basics - Anfänger-Themen 6
A Seltsame Class Cast Exception Java Basics - Anfänger-Themen 3
V Cast-Operator Java Basics - Anfänger-Themen 2
kulturfenster Cast Probleme Java Basics - Anfänger-Themen 2
V Frage zu final und Class bzw. Class.cast Java Basics - Anfänger-Themen 5
F paket.Klasse cannot be cast to paket.Klasse Java Basics - Anfänger-Themen 6
J Cast-Problem Java Basics - Anfänger-Themen 7
D Class Cast Exception Java Basics - Anfänger-Themen 5
R variabler cast Java Basics - Anfänger-Themen 5
G cast von Char nach int Java Basics - Anfänger-Themen 3
zilti Cast Exception bei JTable Java Basics - Anfänger-Themen 15
G cast von int To Integer? Java Basics - Anfänger-Themen 3
M Double -> Int Cast funktioniert nicht. Java Basics - Anfänger-Themen 5
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
B Cast explizit verbieten Java Basics - Anfänger-Themen 10
E Cast von Object zu int (Array) Java Basics - Anfänger-Themen 19
W Java Cast bei Vectoren Java Basics - Anfänger-Themen 10
A Cast Generics Java Basics - Anfänger-Themen 6
M Class Cast Exception Java Basics - Anfänger-Themen 7
J Cast zwischen zwei Unterklassen der selben Oberklasse. Java Basics - Anfänger-Themen 7
B Byte übergeben ohne cast? Java Basics - Anfänger-Themen 12
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
D Ist Ableiten hier sinnvoll Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Kann mir jemand hier die Logik vermitteln? Java Basics - Anfänger-Themen 3
M Wie kann ich hier den Abstand ausgeben? Java Basics - Anfänger-Themen 3
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
P Weswegen entstehen hier Syntaxfehler? Java Basics - Anfänger-Themen 3
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
R Wie würde hier die if-Anweisung aussehen? Java Basics - Anfänger-Themen 18
S Operatoren i=i++; Was passiert hier? Java Basics - Anfänger-Themen 21
G Warum ist hier ein Lamda-Ausdruck möglich Java Basics - Anfänger-Themen 2
O Was bedeutet das hier 999_983? Java Basics - Anfänger-Themen 2
F Warum ist die Ausgabe hier 1? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben