Для long theNumber = inLong;
длинное значение inLong выбирается путем неявного вызова inLong.longValue()
.Это называется автоматической распаковкой (иногда более общей автоматической коробкой).Когда inLong имеет значение NULL, вы получаете NullPointerException, точно так же, как и любой другой метод с нулевым значением.
Поэтому вам следует подумать о некоторой альтернативе:
Если вам не нужно неопределенное значение, выследует убедиться, что вызывающая сторона никогда не пропустит нуль, и подтвердить это с помощью:
private void doStuff(Long inLong) {
assert inLong != null;
long theNumber = inLong;
/* ... */
}
(или используйте Nonnull-Checker ).Если метод был общедоступным, и вы не можете быть уверены, что значение null не передано, лучше сделайте:
public void doStuff(Long inLong) {
if (inLong == null) { throw new IllegalArgumentException(); }
long theNumber = inLong;
/* ... */
}
Если вам не нужны неопределенные значения и не используется значение в коллекции (или в любом другом универсальном параметре),вместо этого используйте метод private void doStuff(long inLong)
.Если вам нужен объект Long, вы, конечно, можете по-прежнему использовать параметр типа long
и выполнять (авто) упаковку внутри doStuff
, чтобы получить соответствующий объект Long.
Если выМне нужны неопределенные значения, вы должны проверить это и сделать то, что необходимо:
private void doStuff(Long inLong) {
if (inLong == null) {
handleUndef();
} else {
long theNumber = inLong;
/* ... */
}
}
Просто установить значение 0 вместо более сложного handleUndef()
, на мой взгляд, сомнительно, потому что тогда вы могли бы иметьв первую очередь использовал параметр типа long (см. выше).