ArrayList<Element> - "unchecked or unsafe operati

Status
Nicht offen für weitere Antworten.
Hallo!

Beim untenstehenden Code handelt es sich um einen Auszug aus einem JDOM-basierten XML-Parser. Mein Problem bezieht sich auf Zeile 5, in der mehrere Elemente zu einer ArrayList vom Typ <Element> zugewiesen werden. Der Code wird zwar kompiliert und scheint zu funktionieren, aber ich erhalte die ebenfalls unten aufgeführte Warnung. Was heißt das, und wie kriege ich es weg? Scheint was mit dem Element-Typ zu tun zu haben, oder?

Falls ein vollständiges Code-Beispiel gewünscht ist, bitte melden!

Code:
ArrayList<Element> artikelliste = new ArrayList<Element>(root.getChildren("article"));
ArrayList<Element> statementliste = new ArrayList<Element>();
for (i = 0; i < artikelliste.size(); i = i + 1) {
    Element artikel = (Element) artikelliste.get(i);
    statementliste.addAll(artikel.getChildren("statement"));
}
Note: Dateioperationen.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
 
G

Gast2

Gast
In artikel.getChildren("statement") können auch andere Objekte als Elemente vorhanden sein d.h. es könnte eine Exception geworfen werden, wenn andere Objekte drin sind... das heißt artikel.getChildren("statement") ist nicht typsicher
 
OK, und wie ändere ich das? Eine Exception abfangen? Oder irgendwie den Typ vorschreiben? Ich habe es damit versucht, <Element> an diversen Stellen in Zeile 5 unterzubringen, aber das hat nicht geklappt.
 

Landei

Top Contributor
Geht das?
Code:
List<Element> artikelliste = new ArrayList<Element>(root.getChildren("article")); 
List<Element> statementliste = new ArrayList<Element>(); 
for (Element artikel : artikelliste) { 
    statementliste.addAll(artikel.getChildren("statement")); 
}
 
S

SlaterB

Gast
einfache Regel: in Cast-Klammern () brauchen niemals eckige Generics-Klammen <> auftauchen
 

Landei

Top Contributor
Wenn getChildren() einfach nur eine ungetypte ("raw-type") Liste zurückgibt, wirst du die Warnung nicht wegbekommen, den theoretisch *ist* die Konvertierung dann auch unsicher. Da du allerdings davon ausgehen kannst, dass es sich *immer* um eine Liste von Elementen handelt, kannst du die Warning ruhig mit @SuppressWarnings("unchecked") unterdrücken. Derartige Warnungen sind prinzipiell kaum zu vermeiden, wenn du mit Bibliotheken vor Java 1.5 arbeitest.

Anstelle der @SuppressWarnings gibt es noch eine andere Möglichkeit, die Warnung zu umgehen, nämlich Class.cast():
Code:
    Object o = new Integer(23);
    Integer i = Integer.class.cast(o); //keine Warnung
 
Landei hat gesagt.:
Da du allerdings davon ausgehen kannst, dass es sich *immer* um eine Liste von Elementen handelt, kannst du die Warning ruhig mit @SuppressWarnings("unchecked") unterdrücken.
Danke, das klappt.

Landei hat gesagt.:
Anstelle der @SuppressWarnings gibt es noch eine andere Möglichkeit, die Warnung zu umgehen, nämlich Class.cast():
Code:
    Object o = new Integer(23);
    Integer i = Integer.class.cast(o); //keine Warnung
Bei Class.cast() erhalte ich die Meldung: "non-static method cast(java.lang.Object) cannot be referenced from a static context."

Welche Möglichkeit habe ich, wenn ich die Warnung nicht einfach unterdrücken möchte, sondern die Ursache beseitigen möchte?
 

Landei

Top Contributor
Welche Möglichkeit habe ich, wenn ich die Warnung nicht einfach unterdrücken möchte, sondern die Ursache beseitigen möchte?
Keine. Wen getChildren keine Liste mit Typ liefert, ist der cast zu einer Liste mit Typ prinzipiell unsicher.

Das läuft bei mir übrigens ohne Probleme:
Code:
public class CastTest {
  public static void main(String... args) {
    Object o = new Integer(23);
    Integer i = Integer.class.cast(o);
    System.out.println(i);
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
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
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
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
J Programm funktioniert aber unsafe operations? Java Basics - Anfänger-Themen 3
G using unsafe operations? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben