必需<object>并找到<object>?

时间:2017-12-09 17:02:25

标签: kotlin kotlin-android-extensions kotlin-extension rx-kotlin kotlin-interop

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?

1 个答案:

答案 0 :(得分:4)

LRUMap实现Map接口,Kotlin中的get方法返回V?,因为当没有元素存在时,它返回null给定的密​​钥。

由于你已经在这种情况下事先进行了检查,你可以合理地确定(假设没有其他线程同时修改地图)这个值不会为空,并强制转换为带有!! operator的非可空类型:

return repoByTask[taskData.taskId]!!

有关从Map阅读时处理缺失密钥的其他方法,请参阅getOrDefaultgetOrElse方法。