Почему я не получаю предупреждения о мертвом коде для инициализации someVal
здесь?
public class DeadCode {
private int someVal = 0;
public DeadCode(int someVal) {
this.someVal = someVal;
}
public int getSomeVal() {
return someVal;
}
public void setSomeVal(int someVal) {
this.someVal = someVal;
}
}
Предполагается, что компилятор Java обнаруживает мертвый код и выдает предупреждение; но это мертво дважды, и проходит без сучка и задоринки.
Это мертво дважды, потому что
- Java автоматически инициализирует поля экземпляра значением
0
или эквивалентным; - значение
someVal
не может быть прочитано без записи.
Я понимаю, что компилятор может пропустить присваивание, если захочет, но это справедливо (по определению) для всего мертвого кода.
Если есть различие между мертвым кодом и кодом, который не имеет эффекта, то я бы ожидал
Присвоение переменной
someVal
не имеет никакого эффекта.
что бы я получил, если бы написал
someVal = someVal;
в моем коде. Но я тоже этого не понимаю.
В любом случае Википедия рассматривает устранение мертвого кода как удаление кода, который не влияет на результаты программы; и это, безусловно, тот случай.
if (a) { if (!a) { //this is dead } }
). Код, который не действует, но будет выполняться, не недостижим и не мертв. - person azurefrog   schedule 11.11.2014