Почему Java не выдает никаких предупреждений о понижении уровня? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему Java не выдает никаких предупреждений о понижении уровня? [закрыто]

Сообщение Anonymous »

Я не понимаю философии, лежащей в основе компилятора Java, который не предупреждает о понижении уровня, когда считает, что это потенциально может быть успешным. В частности, следующее компилируется без какого-либо предупреждения (и я не могу найти в Eclipse опцию, позволяющую включить предупреждение):

Код: Выделить всё

Object v="";
Long t=(Long)v;
Но следующее даже не может скомпилироваться (по уважительной причине):

Код: Выделить всё

Long t=(Long)"";
Я использую Eclipse IDE с настройками по умолчанию и JRE 22. Мне не удалось найти ничего, кроме сообщения, связанного выше. Я знаю, что технически это не непроверяемое приведение, поскольку оно будет проверяться во время выполнения, но я хотел бы быть предупрежден о любом понижающем приведении, и если это невозможно, я бы искренне хотел знать, почему.
Ответ рецензенту:
(1) Другой вопрос задан для практического использования. Я вовсе не об этом прошу. Я знаю практическое применение и почему это нужно разрешить. Я прошу: (а) философию без предупреждения; (б) есть ли способ включить предупреждение?
(2) Почему я ожидаю, что компилятор будет предупреждать о понижающем приведении? Потому что я опытный программист, которому нравится Java за проверку типов во время компиляции, но такое поведение без предупреждений нарушает ожидания типовой безопасности. Дело в том, что в целом мы никогда не должны ожидать, что объект будет длинным, поэтому не имеет смысла не выдавать предупреждение о понижении. В общем, я всегда ожидал, что код Java, который компилируется без каких-либо предупреждений (подавленных или нет), будет типобезопасным (за некоторыми известными исключениями, такими как присвоение массива). Первоначальный пример, который заставил меня задуматься, был Runnable t=(Runnable)new Object();, который был настолько вопиюще неправильным, что я просто не мог понять, почему не было выдано никакого предупреждения.
В ответ на закрытие:
Я не спрашиваю мнения; Я прошу факты. Конкретно для (а) я не ищу дискуссий, а просто для того, почему всё было задумано именно так, а для (б) это вполне фактический вопрос о том, могу ли я включить за это предупреждение или нет. Пользователь ruakh любезно предоставил одну часть ответа на вопрос (а), а пользователь LouisWasserman предоставил другую часть. Вместе они вполне удовлетворительно справились(а). Но на вопрос (б) я до сих пор не получил ответа.

Подробнее здесь: https://stackoverflow.com/questions/793 ... owncasting
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»