Kotlin 必需<;对象>;并发现<;对象>;? 类TaskRepo(taskData:taskData){ 伴星{ private val repoByTask:LRUMap=LRUMap(2,10); fun getInstance(taskData:taskData):OrderFormRepo{ if(notFoundObject(taskData.taskId)){ repoByTask[taskData.taskId]=OrderFormRepo(taskData); } return repoByTask[taskData.taskId];//这里有问题 } private fun notFoundObject(taskId:String):布尔值{ if(repoByTask.containsKey(taskId)&&repoByTask[taskId]!=null){ 返回错误 } 返回真值 } }

Kotlin 必需<;对象>;并发现<;对象>;? 类TaskRepo(taskData:taskData){ 伴星{ private val repoByTask:LRUMap=LRUMap(2,10); fun getInstance(taskData:taskData):OrderFormRepo{ if(notFoundObject(taskData.taskId)){ repoByTask[taskData.taskId]=OrderFormRepo(taskData); } return repoByTask[taskData.taskId];//这里有问题 } private fun notFoundObject(taskId:String):布尔值{ if(repoByTask.containsKey(taskId)&&repoByTask[taskId]!=null){ 返回错误 } 返回真值 } },kotlin,kotlin-android-extensions,kotlin-extension,rx-kotlin,kotlin-interop,Kotlin,Kotlin Android Extensions,Kotlin Extension,Rx Kotlin,Kotlin Interop,} 在同伴对象的getInstance方法中,我得到编译时错误: Required TaskRepo和found TaskRepo?LRUMap实现该接口,该接口在Kotlin中的方法返回一个V?,因为当给定键不存在任何元素时,它返回null 在本例中,您已经预先进行了检查,因此可以合理地确定(假设没有其他线程同时修改映射)该值不会为null,并使用以下命令强制转换为不可为null的类型: 有关在读取地图时处理缺少的键的其他方法,请参阅和方法。双关斩将:-)getOrDefault在androi

}

在同伴对象的getInstance方法中,我得到编译时错误:
Required TaskRepo和found TaskRepo?
LRUMap
实现该接口,该接口在Kotlin中的方法返回一个
V?
,因为当给定键不存在任何元素时,它返回
null

在本例中,您已经预先进行了检查,因此可以合理地确定(假设没有其他线程同时修改映射)该值不会为null,并使用以下命令强制转换为不可为null的类型:


有关在读取
地图时处理缺少的键的其他方法,请参阅和方法。

双关斩将:-)getOrDefault在android中需要最低API级别24,因此没有太多用处,谢谢
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
    }
}
return repoByTask[taskData.taskId]!!