ich A simple Box Class lese, und ich gestolpert zu diesem Code:java: erwartet Runtime aber nicht passieren
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
Wie der Autor in A simple Box Class erwähnt,
Es gibt keine Möglichkeit zu überprüfen, , zur Kompilierzeit, wie die Klasse verwendet wird. Ein Teil des Codes kann eine Ganzzahl in die Box einfügen und erwarten, dass Integer daraus entfernt wird, während ein anderer Teil des Codes fälschlicherweise eine Zeichenfolge übergeben kann, was zu einem Laufzeitfehler führt.
Aber wenn ich diesen Code testen und auszuführen:
public class checkBox {
public static void main(String[] args){
Box box = new Box();
box.set(new Integer(3));
System.out.println(box.get());
box.set("test");
System.out.println(box.get());
}
Es läuft gut, ohne Fehler, und es ist das, was ich erwartet habe, weil in Java kein Problem es bei der Zuordnung von unterschiedlichem Typ Variablen eine ist Objektreferenz (auch Polymorphie geht hier, denke ich).
Was also meint der Autor mit diesem Satz? Was vermisse ich?
Das Risiko besteht, wenn Sie schreiben 'String s = (String) box.get()', aber Sie zuvor eine Ganzzahl in es setzen – AxelH
Der Code funktioniert durch Aufrufen von 'println (Object)' beide Male, obwohl auch ein vorhanden ist 'println (String)'. Dies geschieht, weil 'get()' deklariert wird, um 'Object' zurückzugeben. Dies funktioniert, weil 'println (Object)' auch Strings korrekt behandelt. –