Разрешены только безопасные (?.) Или непустые (!!.) Вызовы на приемнике с нулевым значением

Должен ли я использовать ?. и !!. каждый раз внутри onBindViewHolder и onCreateViewHolder ? Есть ли способ избежать этого?

holder.textview.text и parent.context отображающие эту ошибку.

Код:

 override fun onBindViewHolder(holder: ViewHolder?, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int):ViewHolder { return ViewHolder(TextView(parent.context)) } 

Когда вы переопределяете метод, объявленный в Java, его параметры будут иметь типы платформ, а это значит, что информация об их недействительности отсутствует (если они явно не аннотируются ). Вам решать, стоит ли отмечать эти параметры нулевыми значениями. См. Официальные документы о типах платформ .

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


Вот как это выглядит с удаляемыми типами:

 override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(TextView(parent.context)) } 

Зритель никогда не будет пустым, если только вы не создали нулевой зритель в своем onCreateViewHolder когда count> 0, поэтому его безопасно удалить ?

 override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] } 

Когда вы работаете с типами NULL, как в вашем примере, вам необходимо применить меры безопасности к вашему коду. Либо вы используете ?. каждый раз, или вы проверяете, равен ли ваш параметр !=null . После такого, if компилятор знает, что вызовы этого параметра безопасны, а null невозможен.

В вашем специальном случае нет необходимости иметь типы с нулевым значением. Просто удалите вопросительные знаки из параметров, и все в порядке.

Btw: не использовать !! , есть, безусловно, лучшее решение

Intereting Posts
Android Studio 3.0 не может предложить импорт для shl и shr в Kotlin Котлин инициализирует переменную перед ее объявлением? Чтение нескольких строк из одной линии в Котлине? Класс def не найден из кода Котлина Не удается открыть проект студии Android после установки kotlin Количество экземпляров каждого тега с использованием функционального программирования Интерфейс Pass в качестве параметра в Kotlin Как удалить повторяющиеся записи из FragmentManager? Расчет спящего гиберната @Formula Используя Kovenant от Kotlin, я продолжаю использовать повторяющийся код, используя Deferred Предельная функция в Котлине Можно ли переопределить var с помощью val с унаследованным классом в Kotlin? Kotlin: Почему унарный плюс / минус не способен вывести общий тип из назначения? Недвижимость в интерфейсе не может иметь поле подкладочный Тестирование JUnit в Android Studio с Kotlin прекратило работать