class TaskRepo(taskData: TaskData) {
companion object {
private val repoByTask: LRUMap<String, OrderFormRepo> = LRUMap(2, 10);
fun getInstance(taskData: TaskData): OrderFormRepo {
if (notFoundObject(taskData.taskId)) {
repoByTask[taskData.taskId] = OrderFormRepo(taskData);
}
return repoByTask[taskData.taskId];//PROBLEM HERE
}
private fun notFoundObject(taskId: String): Boolean {
if (repoByTask.containsKey(taskId) && repoByTask[taskId] != null) {
return false
}
return true
}
}
}
在伴生对象的 getInstance 方法中,我得到编译时间错误: 需要TaskRepo并找到TaskRepo?
最佳答案
LRUMap
实现 Map
接口(interface),get
Kotlin 中的该方法返回 V?
,因为当给定键不存在任何元素时,它返回 null
。
由于在这种情况下您已经事先完成了检查,因此您可以合理地确定(假设没有其他线程同时修改映射)该值不会为空,并强制转换为具有 !!
operator 的不可空类型:
return repoByTask[taskData.taskId]!!
有关从 Map
读取时处理丢失键的其他方法,请参阅 getOrDefault
和 getOrElse
方法。
关于kotlin - 需要 <对象> 并找到 <对象>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730952/