【发布时间】:2021-07-20 16:56:46
【问题描述】:
同一文件和同一行出现以下错误。
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
}
您能帮忙解决这些错误吗?
【问题讨论】:
-
bookIdToBookCurrencyMap的类型是什么? -
如果
book为空,您的过滤器应该返回什么? (或者如果book.p为空,如果可能的话? 还是book.p.bookCurrencyId?) -
如果 book 为 null,它应该返回 null。 book.p null 是不可能的。
-
@Nitrodon 它是 mutableMapOf
() -
如果
getOrPut()在映射中没有找到该键,它会调用 lambda 来获取默认值并在映射中设置该值。但是您的地图具有不可为空的值,那么它如何设置为空呢?
标签: kotlin