#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();