Unchecked/Unsafe Operation

Status
Nicht offen für weitere Antworten.

Gayson

Bekanntes Mitglied
Hallo!

Ich habe meine JSE nun auf 1.5 geupdated und versucht, mein aktuelles Programm zu kompilieren.
Da kommt jedoch folgender "Warning" (ist kein Fehler anscheinend, da er trotzdem kompiliert):

Note: D:\Eigene Dateien\Java\works\dienstplan2EditPanel.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Google spuckte mir aus, dass das wohl irgendwas mit den hinzugekommenden Generics in 1.5 zu tun hatte. Ich konnte mir jedoch nirgendwo eine genaue Vorstellung schaffen, was das genau ist bzw. welche Stellen meines Codes "veraltet" sein könnten.
Habt ihr dazu was?

Danke!
 

Gayson

Bekanntes Mitglied
Eigentlich wollt ich nen eigenen Thead aufmachen, ist anscheinend hier gelandet :(.

Habe mir mal die ersten beiden Seiten davon durchgelesen, soweit ichs verstanden habe, kann man mit Hilfe von Generics "Containern" wie Arrays, Listen etc. genauer zuweisen, was die für Inhalte tragen, und somir das casten einsparen.

Doch nun zurück zu meinem Code. Könnte das "Problem" z.B. hier liegen?

Code:
				try {
					SAXBuilder builder = new SAXBuilder();
					Document doc = builder.build("Mitarbeiter.librml");
					Element root = doc.getRootElement();
					List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
					Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
					while (mitarbeiterIterator.hasNext()) {
						Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
						Element mitarbeiterKuerzel = mitarbeiterElement.getChild("Kuerzel");
						if(mitarbeiterKuerzel.getText().equals((String)vKuerzel.get(i))){
							Element selMitarbeiterFarbe = mitarbeiterElement.getChild("Farbe");
							//Kürzel+Farbe setzen
							vData.add(new ListElement((String)vKuerzel.get(i), Color.decode(selMitarbeiterFarbe.getText())));
						}
					}
				} catch (JDOMException e){e.printStackTrace();}
				catch (IOException e) {e.printStackTrace();}

Wie wäre denn die elegantere Methode? So?

Code:
				try {
					SAXBuilder builder = new SAXBuilder();
					Document doc = builder.build("Mitarbeiter.librml");
					Element root = doc.getRootElement();
					List<Element> mitarbeiterInfo = root.getChildren("Mitarbeiter");;
					Iterator<Element> mitarbeiterIterator = mitarbeiterInfo.iterator();
					while (mitarbeiterIterator.hasNext()) {
						Element mitarbeiterElement = mitarbeiterIterator.next();
						Element mitarbeiterKuerzel = mitarbeiterElement.getChild("Kuerzel");
						if(mitarbeiterKuerzel.getText().equals((String)vKuerzel.get(i))){
							[color=red]Element selMitarbeiterFarbe = mitarbeiterElement.getChild("Farbe");[/color]
							//Kürzel+Farbe setzen
							vData.add(new ListElement((String)vKuerzel.get(i), Color.decode(selMitarbeiterFarbe.getText())));
						}
					}
				} catch (JDOMException e){e.printStackTrace();}
				catch (IOException e) {e.printStackTrace();}

Danke!!!
 
B

Beni

Gast
Je weniger Casts du machst, desto besser. Also wäre die zweite Variante eleganter.
 

Gayson

Bekanntes Mitglied
Ist die Verwendung denn genauso, wie ich das gemacht habe, richtig? Gibts da noch was zu beachten? Oder ist das wirklich so einfach?
 
B

bygones

Gast
bin auch für die zweite Variante...

was ist vKuerzel ? kann man das nicht auch noch generisch machen ?

generics spielen eigentlich für das compilierte Programm keine besondere Rolle, da sie vom Compiler wieder geändert werden und der Compiler den Cast übernimmt. Sie sind somit nur für das leichtere Verständnis des / der Programmierer !
 
G

Guest

Gast
Jo, ich habe vKuerzel jetzt auch generisch gemacht.

Trotz allem meckert der Compiler immer noch mit dem oben genannten Hinweis. Wie kann ich folgenden Code generisch machen?

Code:
public class Mitarbeiter{
	private int stunden;
	private Color color;
	private String kuerzel;
	private String name;
	private Vector<Datum> urlaubsvektor;

	public Mitarbeiter(String name){
		//String name erstellen
		this.name = name;
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			List<Element> mitarbeiterInfo = root.getChildren("Mitarbeiter");
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
	}

	public String getName(){return name;}
	public String getKuerzel(){return kuerzel;}
	public Vector getUrlaub(){return urlaubsvektor;}
	public Color getFarbe(){return color;}
	public int getStunden(){return stunden;}
}

Es liegt aller Wahrscheinlichkeit an der Zeile
Code:
			List<Element> mitarbeiterInfo = root.getChildren("Mitarbeiter");
da, wenn ich die Zeile wegnehme, keine Warunung mehr kommt.... Aber Warum?
 
B

bygones

Gast
das liegt daran, dass jdom keine generischen methoden hast. D.h. daran kannst du nichts ändern. Daher, dass du weißt, dass aber eine List<Element> zurückgegeben wird, würde ich über die Warnung hinwegsehen
 
G

Guest

Gast
Schade eigentlich, jetzt muss ich halt damit leben.

Danke!!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben