Задать вопрос
WatsOne
@WatsOne
Java/Android developer

Каким образом после преобразования long в Long я смог получить null?

У меня есть некоторый метод, параметр которого Long.
А вызов этого метода происходит с параметром long (примитив). Судя по логам, в этом методе у меня получается на входе null. Здравый смысл негодует: ситуация не возможна, но факт остается фактом. Исключено все, что только можно исключить. Повторить не удается.
Возможно ли, что это редкий косяк JVM? Или какие еще могут быть варианты?

Пример кода привести сложно, но формально:

//EJB1
final long foo = data.getLongValue();
ejb2.bar(foo);

//EJB2
bar(Long x) {
entityManager.find(SomeClass.class, x);
//java.lang.IllegalArgumentException: id to load is required for loading
//что означает только что x == null
//ВАЖНО после перезапуска веб сервера ошибка пропадает
}
  • Вопрос задан
  • 1400 просмотров
Подписаться 4 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 3
Olej
@Olej
инженер, программист, преподаватель
Возможно ли, что это редкий косяк JVM?

Практически исключено.

Или какие еще могут быть варианты?

Возможно, это косяк в вашем коде ... и не столь редкий. ;-)
Ответ написан
Комментировать
@parkito
Современный JVM очень хорош. В 99,999999 % ошибку в приложении нужно искать в своем коде. Если у вас многопоточное приложение, то в том что повторить баг не удается нет ничего удивительного.
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Вообще, лучше избегать классов, когда можно использовать примитивы.
Исключение: generics.

foo(Long num) {
  // omitted
}

long x = 10;

foo(x); // говорите, вот так null?
foo(new Long(x)); // а если так?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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