如何避免空检查
我有一个类库这样的:
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的东西?
我相信你可以使变量不可为空来解决这个问题。 也许也是一个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)