Доступ к нулевому указателю: переменная «tipoEstablecimiento» может иметь значение null только в этом расположении

#java

#java

Вопрос:

Я искал в Интернете информацию об этой ошибке безрезультатно. Я запутался в этом. Кто-нибудь может помочь с этим?

 .
.
.

  TipoEstablecimientoHotel tipoEstablecimiento  = null;
.
.
.
.
try{
  tipoEstablecimiento.setCodigo("");  <--- Line with the error.
}catch (Exception e){
  System.out.println(e.getMessage());
}
.
.
.
  

Конечно, у меня есть импорт, который мне нужен (я имею в виду для TipoEstablecimiento), и он помечает эту строку соответствующим предупреждением.

Заранее спасибо.

Комментарии:

1. Вы где-нибудь инициализировали объект или это часть вашего пропущенного кода?

2. Ну, очевидно, я создал соответствующий класс Java для этой цели. Я сказал, что у меня есть правильный импорт, но хороший вопрос 🙂

Ответ №1:

Вы не показали нам достаточно кода, но я бы воспользовался полученной вами ошибкой. Вы не инициализируете переменную между присвоением ей null и вызовом ее setCodigo метода, поэтому вы наверняка получите исключение NullPointerException (вы не можете разыменовать нулевой объект). Убедитесь, что вы создали ее экземпляр перед использованием, вызвав ее конструктор, что-то вроде:

 tipoEstablecimiento = new TipoEstablecimientoHotel();
  

Комментарии:

1. Чем проверять, что это за ошибка, и устранять проблему, если вы не знаете как, задайте здесь (новый вопрос, с подробностями и соответствующим кодом), мы все будем рады помочь 🙂

Ответ №2:

Ну, вы пытаетесь вызвать метод через tipoEstablecimiento — и что бы ни появлялось с предупреждением, доказало, что переменная не может иметь ненулевое значение — поэтому она всегда выдает NullPointerException .

Вам нужно где-то присвоить переменной ненулевое значение…

Комментарии:

1. Ну, я инициализирую этот тип равным null, потому что в данный момент я не могу объявить его обычным способом, я имею в виду с помощью: TipoEstablecimientoHotel tipoEstablecimiento = new TipoEstablecimientoHotel();

2. @elvenbyte: Итак, как вы ожидаете, что это когда-нибудь сработает? Вы должны быть благодарны, что компилятор / IDE / что угодно предупреждает вас о том, что ваш код никогда не будет работать во время выполнения, но выдает вам это предупреждение во время компиляции. И почему вы не можете вызвать конструктор?

Ответ №3:

Вам необходимо создать экземпляр класса, прежде чем вызывать его метод.

TipoEstablecimientoHotel tipoEstablecimiento = новый TipoEstablecimientoHotel();

Ответ №4:

IDE или компилятор сообщают вам, что вы никогда не устанавливаете tipoEstablecimiento . Другими словами, та строка, на которую вы указываете, абсолютно гарантированно выдает NullPointerException .

Установите переменной некоторый экземпляр TipoEstablecimientoHotel , чтобы избежать ошибки.

Комментарии:

1. Основываясь на вашем ответе другим, какие конструкторы существуют для типа (или расширяющих типов)? Думайте об этом как о строке. String x = "abc"; x.toUpperCase(); сбой не произойдет, потому что он действительно говорит: "abc.".toUpperCase() . Однако String x = null; x.toUpperCase(); произойдет сбой, потому что она говорит null.toUpperCase() .

Ответ №5:

С setCodigo ничего не поделаешь. Значение TipoEstablecimiento равно NULL, а не объект этого класса. Сначала вы должны создать экземпляр объекта

Комментарии:

1. Перед выполнением setCodigo вы должны сделать что-то вроде: TipoEstablecimientoHotel tipoEstablecimiento = new TipoEstablecimientoHotel();