Котлин: Несоответствие типов: предполагаемый тип-строка? но Струна была ожидаема

#kotlin

Вопрос:

Ниже приведены ошибки для одного и того же файла и в одной строке.

 Type mismatch: inferred type is String? but String was expected
Type mismatch: inferred type is String? but TypeVariable(V) was expected
 

Это и есть код:

 return posLevelRealizedFxGlRecords.filter {
      if (it == null) {
        false
      } else {
        var bookCurrency: String? = bookIdToBookCurrencyMap.getOrPut(it.bookId) {
          val book: Book? = dataLookupService.getBook(it.bookId, knowledgeTimestamp)
          book?.p?.bookCurrencyId
        }

        if (bookCurrency == null) {
          false
        } else {
          it.currencyId != bookCurrency
        }
      }
    }
 

Показаны эти ошибки в строке ниже.

 book?.p?.bookCurrencyId
 

Я также попробовал код ниже, а не выше строки,

 if (book == null) {
            null
          } else {
            book.p.bookCurrencyId
          }
 

Не могли бы вы помочь устранить эти ошибки ?

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

1. Что это за тип bookIdToBookCurrencyMap ?

2. Что должен возвращать ваш фильтр, если book он равен нулю? (Или если book.p равно нулю, если это возможно? Или book.p.bookCurrencyId ?)

3. если значение book равно null, оно должно возвращать значение null. book.p null невозможно.

4. @Nitrodon Это изменяемое значение<Строка, строка>()

5. Если getOrPut() этот ключ не найден на карте, он вызывает лямбду, чтобы получить значение по умолчанию, и устанавливает это значение на карте . Но ваша карта имеет ненулевые значения, так как же она может установить значение null?

Ответ №1: