Код: Выделить всё
Object v="";
Long t=(Long)v;
Код: Выделить всё
Long t=(Long)"";
В ответ комментатору:
(1) Другой вопрос задан для практического использования. Я вовсе не об этом прошу. Я знаю практическое применение и почему это нужно разрешить. Я прошу: (а) философию без предупреждения; (б) есть ли способ включить предупреждение?
(2) Почему я ожидаю, что компилятор будет предупреждать о понижающем приведении? Потому что я опытный программист, которому нравится Java за проверку типов во время компиляции, но такое поведение без предупреждений нарушает ожидания типовой безопасности. Дело в том, что в целом мы никогда не должны ожидать, что объект будет длинным, поэтому не имеет смысла не выдавать предупреждение о понижении. В общем, я всегда ожидал, что код Java, который компилируется без каких-либо предупреждений (подавленных или нет), будет типобезопасным (за некоторыми известными исключениями, такими как присвоение массива). Первоначальный пример, который заставил меня задуматься, был Runnable t=(Runnable)new Object();, который был настолько явно неправильным, что я просто не мог понять, почему не было выдано никакого предупреждения.
Подробнее здесь: https://stackoverflow.com/questions/793 ... owncasting
Мобильная версия