Java автоматическое распаковка - есть ли предупреждение компилятора?
-
19-09-2019 - |
Вопрос
Я большой поклонник автоматического бокса в 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, почему бы не хранить это таким образом?
Я сомневаюсь, что это будет предупреждение. Это одна из причудливых автозаботок.
Джошуа Блох обращается к этому в своей книге «Эффективная ява». По сути, компилятор пытается сделать для вас больше, что ожидается. Другими словами, этот тип проблемы чаще связан с использованием, и в результате трудно «обнаружить ошибку», поскольку ошибка, семантически говоря, просто нет.