Назначение long на Long в Java - PullRequest
       16

Назначение long на Long в Java

4 голосов
/ 14 августа 2011

В настоящее время я изучаю один из учебных пособий по Android . Я нашел выражение как:

Bundle bundle = getIntent().getExtras();
Long longVariable = bundle.getLong(someId);
if( longVariable != null )
{
  //doSomething
}

Посмотрев на Bundle.getLong в API, я увидел, что он возвращает long (примитив). Я давно не писал на Java, а только на C #, но как переменная object Long longVariable может быть нулевой? * * 1010

Ответы [ 4 ]

6 голосов
/ 14 августа 2011

Если getLong() действительно имеет тип возврата long, этого не может быть, то есть l никогда не будет нулевым.Возможно, программист не искал тип возвращаемого значения, но из имени метода будет выведено Long.

2 голосов
/ 14 августа 2011

Что если вы введете неправильный идентификатор? Тогда он не найден, но вы получаете ноль или возбуждается исключение? Документация гласит, что:

public long getLong (String key)
Returns the value associated with the given key, 
or 0L if no mapping of the desired type exists for the given key.  
Parameters

     key    a String
Returns
     a long value

Так что он никогда не возвращает ноль, но в конечном итоге 0L. Однако getLongArray иногда возвращает значение null, поэтому использование getLongArray может быть пережитком?

1 голос
/ 14 августа 2011

В Java Long является объектом и, как и любой объект, может быть нулевым.long является примитивным типом и не может иметь значение null.

Начиная с версии Java 1.5 Java поддерживает автоматическую коробку и распаковку, что означает автоматическое преобразование примитивов в объекты.

Если методвозвращает long, тогда, вероятно, безопасно не проверять null, даже если вы приведете его к Long, однако, если метод возвращает объект Long, будет хорошей идеей проверить наличие нулей.

0 голосов
/ 14 августа 2011

Попробуйте создать новый экземпляр.bundle.getLong(someId) возвращает тип примитива long, а не Long.Long l = new Long(bundle.getLong(someId));

А затем проверьте if(l != null)

Убедитесь, что вы извлекли правильное значение long из Bundle.Попробуйте Log вызвать этот Long объект, посмотрите, все ли в порядке.

Log.i("MY LONG: ", String.valueOf(l));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...