Ожидаемый тип не принимает значения null в Java, но значение может быть пустым в Kotlin

Я создаю спортивное приложение и столкнулся с проблемой во время компиляции. Переменная представления в функции getCachedSubmission равна null и, похоже, требует пустого дескриптора, но я не уверен. Это код ниже:

import com.bluebeam.premierleaguego.features.model.SubmissionWrapper import com.bluebeam.premierleaguego.data.reddit.RedditAuthentication import com.bluebeam.premierleaguego.data.service.RedditService import com.google.common.base.Optional import io.reactivex.Single import net.dean.jraw.models.CommentSort import net.dean.jraw.models.Submission import java.util.* import javax.inject.Inject import javax.inject.Singleton import javax.annotation.Nullable /** * Implementation of the [SubmissionRepository] interface. Stores [SubmissionWrapper]s in a map * keyed by their id. * TODO: should there be a limit to how many submissions are cached? */ @Singleton class SubmissionRepositoryImpl @Inject constructor( val redditAuthentication: RedditAuthentication, val redditService: RedditService) : SubmissionRepository { private val idToSubmissionMap = HashMap<String, SubmissionWrapper>() override fun getSubmission( id: String, sort: CommentSort, forceReload: Boolean): Single<SubmissionWrapper> { // Use submission in cache if available and has the right comment sorting. if (!forceReload && idToSubmissionMap[id] != null && idToSubmissionMap[id]?.sort == sort) { return Single.just(idToSubmissionMap[id]) } return redditService.getSubmission(redditAuthentication.redditClient, id, sort) .flatMap { s: Submission -> val wrapper = SubmissionWrapper(s) wrapper.sort = sort idToSubmissionMap[wrapper.id] = wrapper Single.just(wrapper) } } override fun getCachedSubmission(id: String): Optional<Submission> { val submission = idToSubmissionMap[id]?.submission return Optional.of(submission) } override fun saveSubmission(submissionWrapper: SubmissionWrapper) { idToSubmissionMap[submissionWrapper.id] = submissionWrapper } override fun reset() = idToSubmissionMap.clear() } 

Ошибка, которую я продолжаю получать из функции getCachedSubmission: Ожидаемый тип не принимает значения null в Java, но значение может быть пустым в Kotlin. Если есть предложения по устранению этого, что было бы полезно. Благодаря!

Optional.of не принимает значение null (он выдает исключение, если оно получает), но использует ?. означает, что submission может быть null . Вместо этого используйте Optional.ofNullable .

Использовать ? рядом с переменным типом данных, чтобы позволить ему принимать нулевое значение. Имейте оператор if в функции getCachedSubmission (которая также имеет ? ) Для управления потоком информации, если переменная имеет значение null .

В этом примере я создаю переменную argument типа String? чтобы впоследствии его можно было заменить на null. В блоке try / catch (который я поставил как дополнительный уровень обработки исключений на всякий случай) getCachedSubmission аргумент getCachedSubmission , а внутри функции обрабатывается информация, чтобы изменить то, что отображается, если переданный аргумент равен null .

Чтобы увидеть, что происходит, когда переданный аргумент равен null uncomment, argument = null; строка кода.

 var argument: String? = "abc"; fun main(args: Array<String>) { try { //uncomment me below //argument = null; argument = getCachedSubmission(argument); println(argument); } catch(e: Exception) { //Some sort of exception encountered println("do nothing"); } } fun getCachedSubmission(parameter: String?): String { var flow = "normal"; println(parameter); if(parameter == null) { flow = "not normal" return flow; } return flow; } 

Надеюсь это поможет.

  • Котлин - эквивалентность комбинации Свифта «если пусть + литье»
  • Теперь отображается плавающая кнопка действия
  • Несколько значков желоба связанных файлов XML в Android Studio с Kotlin
  • Вкус продукта: найден дубликат класса
  • Расширения и переменные Android Kotlin
  • Метод hashMapOf () в Котлине
  • Как показать только день и месяц в диалоговом окне выбора даты в Kotlin (Android)?
  • Как рисовать линии с помощью drawLine ()
  • Использовать NumberFormat.getCurrency в Kotlin Android
  • Получить строку базы данных с помощью Anko
  • Параллельные сопрограммы Kotlin
  • Interesting Posts

    У Котлина есть сборщик мусора? Если да, то на каком алгоритме он основан?

    Неразрешенная ссылка при ссылке на Java-код из тестов Kotlin в проекте Spring Boot с использованием Gradle

    как использовать DecoratingStringHashMapper с kotlin?

    Как реализовать readLine () !!. ToIntArray () на Kotlin?

    Должен ли я использовать класс данных, даже если я реализую все hashCode (), equals () и toString ()?

    Kotlin: Неразрешенная ссылка: javaClass

    Просмотр не обновляется после первого запуска LiveData при использовании фоновой работы в Android

    Dagger 2 не генерирует компонентный класс (Android, Kotlin)

    Как изменить порядок сравнения в Kotlin

    RxJava2 как отделить различную реализацию наблюдаемого излучателя

    GSON бросает Ожидаемый BEGIN_OBJECT, но BEGIN_ARRAY

    Попытка написать эффективный код для обновления цвета фона с помощью Kotlin

    Класс данных Kotlin: почему toString () экспортирует закрытые свойства

    RxAndroid – использование RxView.touches очищает другие обработчики

    Что не так с использованием инсталляции setter для Android ViewModel против внедрения и ввода ViewModel.Factory?

    Давайте будем гением компьютера.