kotlin - 需要 <对象> 并找到 <对象>?

标签 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?

最佳答案

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

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

return repoByTask[taskData.taskId]!!

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

关于kotlin - 需要 <对象> 并找到 <对象>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730952/

相关文章:

serialization - Kotlin-将JSON数组序列化为多个类

安卓KTX : how to override Kotlin added property extension

android - 在TextView中播放/暂停选取框并平稳运行

android - Kotlin 协程等待 2 个或更多不同的并发请求

android - 替代 findViewById 的 Kotlin Android 扩展如何防止空 View ?

Android Kotlin : java. lang.NoClassDefFoundError:解析失败:<KotlinObject>

kotlin - 如何在 Kotlin 中引用匿名内部类?

kotlin - Kotlin-Kotlin是否像Java中的基类一样包含Object类?

generics - 如何从 kotlin 中的枚举类和字符串获取原始类型的枚举值

android - 使用 Kotlin 函数特性如何使这段代码更好?