如何避免空检查

我有一个类库这样的:

interface TodosRepository : CrudRepository<Todo, Long> { fun findByUid(uid: String): Todo? } 

以及一个可以标记这个待办事项的方法:

 fun markAsDone(uid: String): ResponseEntity<String> { var todo = todosRepository.findByUid(uid) if(todo == null){ return ResponseEntity("Not found", HttpStatus.NOT_FOUND) } todo.status = 1 todosRepository.save(todo) return ResponseEntity.ok("Saved") } 

IntelliJ问我用elvis操作符替换todo == null

 fun markAsDone(uid: String): ResponseEntity<String> { var todo: Todo? = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND) todo.status = 1 todosRepository.save(todo) 

但是,那么它要求我在使用todo?.status = 1设置状态为1时使用空检查todo?.status = 1事情是我认为它不应该问我,因为在那一刻,我很确定todo是不再是零。
有没有什么解决办法,或者我可能误解了Kotlin的东西?

One Solution collect form web for “如何避免空检查”

我相信你可以使变量不可为空来解决这个问题。 也许也是一个val

 val todo: Todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND) 

编辑:省略返回类型也应该推断不可为空的Todo类型。

如果你没有明确的类型,那么IntelliJ建议的自动更改会顺利进行; 它似乎选择保持不变,而不是将其更改为不可空,这有点挫败了提示的目的。

 val todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND) 
  • Reactor Flux <MyObject> to Mono <List <MyObject >>
  • 通用铸造在Kotlin
  • Kotlin中未解决的参考异步
  • 如何添加kotlin类到gradle JavaCompile任务
  • Kotlin演员来演员沟通
  • 单元测试验证通过被调用的功能
  • Android Kotlin:使用Mockito / PowerMock嘲笑免费的功能
  • Kotlin函数参数:Val不能被重新分配
  • 配置kapt来处理lombok注释
  • 我想使用Kotlin在Android中显示DialogFragment
  • 我怎样才能暂停一个事件流经一个可观察的?
  • Kotlin language will be the best programming language for Android.