#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:
....
book?.p?.bookCurrencyId?:"NOT_FOUND" // you can return whatever you want to express null value for bookCurrencyId
....