Как определить функцию oneline, вызывающую функцию с нулевыми переменными

Если у меня есть что-то вроде:

fun showProgressView() = ultraRecyclerView?.showProgressBar()

он говорит, что он возвращает Unit? и не Unit (отредактировано)

—–РЕДАКТИРОВАТЬ—–

Один из способов может быть fun showProgressView() = ultraRecyclerView?.showProgressBar() ?: Unit но для меня это выглядит не так.

Другой способ: fun showProgressView() { ultraRecyclerView?.showProgressBar() } Но я не могу найти способ для андроид-студии поддерживать этот формат.

Если вы используете короткую форму выражения функции, выводимый тип результата выражения определяет тип возвращаемой функции. Если это тип платформы из Java, он может быть нулевым. Если это тип Котлина, то он будет знать правильную нулеустойчивость.

Но так как вы используете безопасный оператор ?. вы говорите, что он может быть недействительным. И если результатом является null или Unit то это дает тип выводимого результата Unit?

Что странно, но это именно то, что вы говорите. Поэтому либо используйте тело нормальной функции с { .. } либо, если это возможно, дайте функции явному возвращаемому типу.

 fun showProgressView(): Unit { ultraRecyclerView?.showProgressBar() } 

Вы также можете удалить нулеустойчивость, создав функцию расширения в Unit? :

 fun Unit?.void() = Unit 

И используйте его всякий раз, когда вы хотите исправить возвращаемый тип:

 fun showProgressView() = ultraRecyclerView?.showProgressBar().void() 

У IntelliJ IDEA / Android Studio нет настройки для сохранения стиля функции тела блока в одной строке. Тем не менее, вы можете использовать run чтобы обойти это:

 fun showProgressView() = run<Unit> { ultraRecyclerView?.showProgressBar() } 

Обычно вам не нужно добавлять явные аргументы типа для run но в этом случае предоставление им дает желаемую подпись метода (тип возврата Unit а не Unit? ).

Примечание. Этот ответ адаптирован из комментария, который я дал, почему назначения не являются инструкциями .