Unchecked cast

Status
Nicht offen für weitere Antworten.

reibi

Top Contributor
Hallo zusammen

Ich habe in meinem Eclipse folgenden Aufruf:

Code:
Matrix<String> myMatrix2 = (Matrix<String>)Utils.clone(myMatrix);

Das ganze wird gelb unterstrichen und es heisst: "Type safety: Unchecked cast from Object to Matrix<String>"


oder hier die Bilder:

b10frczqlkuim2f4z.png

und
b10flwx049b9yp44j.png



Also
1.) was heisst das: "Warnungen werden unterdrückt"
2.) Warum gibts da keinen Anderen Quickfixpunkte
und vor allen
3.) Wie kann ich das sauber machen, ohne dass ich mich auf eine spezielle Klasse beschränken muss. Es soll nämlich mit allen Objekten funktionieren.

<E>-Typisierungen kann ich leider nur in Collections verwenden, Schade
 
1)
das sind drei deutsche Wörter, was kann man daran nicht verstehen?
im Moment hast du ne Warning, wenn du das vorgeschlagene hinschreibst, dann hast du keine Warning mehr, dann ist sie unterdrückt
2)
es gibt keine anderen Lösungsmöglichkeiten, weder in Java noch sonst wo in der Welt (außer evtl. 3) )
3)
den Cast selber kannst nicht sicher machen, von Object nach Generics ist per Definition unsicher,
du kannst noch mit instanceof nachschauen obs die richtige Klasse ist und die enthaltenen Elemente prüfen, ob die auch stimmen,
aber selbst wenn du dir so Sicherheit verschaffst weiß der Compiler nix davon, am Ende muss immer der unsichere Cast stehen,
mit Suppress ersparst dur dir aber danach die Warning

----

damit du die Warning nicht für jeden Zugriff schreiben musst geht folgendes:

Code:
public class Test {

	public static void main(String[] args) throws Exception {

		TestList<Integer> a = new TestList<Integer>();
		TestList<Integer> b = clone(a);
		System.out.println(a == b);
	}

	@SuppressWarnings("unchecked")
	public static <T extends RealCloneable> T clone(T t) {
		return (T) t.clone();
	}

}

interface RealCloneable {
	public Object clone();
}

class TestList<T> extends ArrayList<T> implements RealCloneable, Cloneable {
	public Object clone() {
		return super.clone();
	}
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben