Я - большой поклонник автоупаковки в Java, поскольку это сохраняет много ужасного шаблонного кода. Однако я нашел, что автораспаковывание сбивает с толку при некоторых обстоятельствах, где объект Числа может быть несуществующим. Там какой-либо путь состоит в том, чтобы обнаружить, где автораспаковывание происходит в кодовой базе при предупреждении javac? Любое другое решение обнаружить случаи распаковывания только (такие как FindBugs или определенное для Eclipse предупреждение компилятора) ценилось бы, поскольку я не могу найти никого.
Для разъяснения я не хочу, чтобы любые предупреждения были сгенерированы при упаковке - только распаковывание.
Вот простой пример некоторого кода, который может вызвать запутывающий NullPointerExceptions:
class Test {
private Integer value;
public int getValue() {
return value;
}
}
Затмение позволяет выполнять синтаксические операции бокса и распаковки (но не те или иные). Я установил их в ярко-красный цвет: если что-то случится, это означает, что я неаккуратно подбирал параметры и аргументы.
Ага. В Затмение:
Настройки->Ява->Компилятор->Ошибки/Предупреждения->Потенциальные проблемы программирования->преобразование бокса и распаковки
.К сожалению, нет. Это одна из проблем с номерами автоматической распаковки. Вы можете
private Integer value = 0
! = Null? value: 0
Лично я предпочитаю первый метод. В общем, я думаю, что у вас не будет слишком много случаев, когда у вас должно быть нулевое число.
Кроме того, почему вы используете большое целое число для хранения значения. Если вы возвращаете только небольшое число int, почему бы не сохранить его в таком виде?
Я сомневаюсь, что это будет предупреждающий случай. Это одна из причудровков автобаковки.
Джошуа Блос обращается к этому в своей книге «Эффективная Java». В основном, компилятор пытается сделать больше для вас, что ожидается. Другими словами, этот тип проблемы чаще связан с использованием и в результате, трудно «обнаружить ошибку», поскольку ошибка, семантически говоря, просто не там.