Java автоматическое распаковывание - является там предупреждением компилятора?

Я - большой поклонник автоупаковки в Java, поскольку это сохраняет много ужасного шаблонного кода. Однако я нашел, что автораспаковывание сбивает с толку при некоторых обстоятельствах, где объект Числа может быть несуществующим. Там какой-либо путь состоит в том, чтобы обнаружить, где автораспаковывание происходит в кодовой базе при предупреждении javac? Любое другое решение обнаружить случаи распаковывания только (такие как FindBugs или определенное для Eclipse предупреждение компилятора) ценилось бы, поскольку я не могу найти никого.

Для разъяснения я не хочу, чтобы любые предупреждения были сгенерированы при упаковке - только распаковывание.

Вот простой пример некоторого кода, который может вызвать запутывающий NullPointerExceptions:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
9
задан Russ Hayward 9 January 2010 в 13:37
поделиться

4 ответа

Затмение позволяет выполнять синтаксические операции бокса и распаковки (но не те или иные). Я установил их в ярко-красный цвет: если что-то случится, это означает, что я неаккуратно подбирал параметры и аргументы.

1
ответ дан 4 December 2019 в 21:49
поделиться

Ага. В Затмение:

Настройки->Ява->Компилятор->Ошибки/Предупреждения->Потенциальные проблемы программирования->преобразование бокса и распаковки

.
5
ответ дан 4 December 2019 в 21:49
поделиться

К сожалению, нет. Это одна из проблем с номерами автоматической распаковки. Вы можете

  • инициализировать его значением по умолчанию, например private Integer value = 0
  • Проверить возвращаемое значение null ! = Null? value: 0

Лично я предпочитаю первый метод. В общем, я думаю, что у вас не будет слишком много случаев, когда у вас должно быть нулевое число.

Кроме того, почему вы используете большое целое число для хранения значения. Если вы возвращаете только небольшое число int, почему бы не сохранить его в таком виде?

2
ответ дан 4 December 2019 в 21:49
поделиться

Я сомневаюсь, что это будет предупреждающий случай. Это одна из причудровков автобаковки.

Джошуа Блос обращается к этому в своей книге «Эффективная Java». В основном, компилятор пытается сделать больше для вас, что ожидается. Другими словами, этот тип проблемы чаще связан с использованием и в результате, трудно «обнаружить ошибку», поскольку ошибка, семантически говоря, просто не там.

1
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: