【问题标题】:Required <Object> and found <Object>?需要 <Object> 并找到 <Object>?
【发布时间】:2017-12-09 17:02:25
【问题描述】:
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 方法中,我得到了编译时间 error: 需要 TaskRepo 并找到 TaskRepo?

【问题讨论】:

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


    【解决方案1】:

    LRUMap 实现了Map 接口,get 方法在 Kotlin 中返回 V?,因为它在给定键不存在任何元素时返回 null

    由于您已经在这种情况下事先进行了检查,因此您可以合理确定(假设没有其他线程同时修改映射)该值不会为空,并强制转换为具有!! operator:

    的不可空类型
    return repoByTask[taskData.taskId]!!
    

    有关从Map 读取时处理丢失键的其他方法,请参阅getOrDefaultgetOrElse 方法。

    【讨论】:

    • 双重救援 :-)
    • getOrDefault 在 android 中需要最低 API 级别 24,所以无论如何都没有多大用处,谢谢
    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2018-03-21
    • 2021-03-31
    • 2020-09-25
    相关资源
    最近更新 更多