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

StackOverflow https://stackoverflow.com/questions/2033481

Вопрос

Я большой поклонник автоматического бокса в Java, поскольку она экономит много уродливой коды котла. Однако в некоторых обстоятельствах я обнаружил, что аутокомбангинг путает, когда объект числа может быть нулевым. Есть ли способ обнаружить, где автокбороя происходит в кодовой базе с предупреждением Javac? Любое другое решение для обнаружения только случаев распаковки (таких как Findbugs или предупреждение о компиляторе, специфичное для затмения), будет оценено, поскольку я не могу найти.

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

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

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
Это было полезно?

Решение

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

Другие советы

Ага. В Eclipse:

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top