Я читаю A simple Box Class, и я наткнулся на этот код:Java: ожидается RuntimeError, но не бывает
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
Как автор упоминает в A simple Box Class,
Там нет никакого способа проверить во время компиляции используется класс. Одна часть кода может помещать Integer в поле и ожидать, что из него выйдут целые числа, а другая часть кода может ошибочно пройти в String, что приведет к ошибке выполнения.
Но когда я проверить и запустить этот код:
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());
}
Он работает нормально, без ошибок, и это то, что я ожидал, потому что в Java не существует никаких проблем при назначении различных переменных типа Ань Ссылка на объект (также полиморфизм идет здесь, я думаю).
Так что же означает автор по этой фразе? Что мне не хватает?
Риск заключается в том, что вы пишете 'String s = (String) box.get()', но вы ранее устанавливали в него целое число – AxelH
Код работает, вызывая 'println (Object)' оба раза, даже если существует также 'Println (String)'. Он делает это, потому что 'get()' объявляется возвратом 'Object'. Это работает, потому что 'println (Object)' также корректно обрабатывает строки. –