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?
答案 0 :(得分:4)
LRUMap
实现Map
接口,Kotlin中的get
方法返回V?
,因为当没有元素存在时,它返回null
给定的密钥。
由于你已经在这种情况下事先进行了检查,你可以合理地确定(假设没有其他线程同时修改地图)这个值不会为空,并强制转换为带有!!
operator的非可空类型:
return repoByTask[taskData.taskId]!!
有关从Map
阅读时处理缺失密钥的其他方法,请参阅getOrDefault
和getOrElse
方法。