Intellij idea 如何避免空检查
我有这样一个存储库类:Intellij idea 如何避免空检查,intellij-idea,kotlin,Intellij Idea,Kotlin,我有这样一个存储库类: interface TodosRepository : CrudRepository<Todo, Long> { fun findByUid(uid: String): Todo? } 但是,当使用todo?将状态设置为1时,它要求我使用null检查。status=1 问题是,我认为它不应该问我,因为在这一点上,我非常确定todo不再是空的。 是否有任何解决方法,或者我可能误解了Kotlin的某些内容?我相信您可以使变量不可为null来解决此问题。也
interface TodosRepository : CrudRepository<Todo, Long> {
fun findByUid(uid: String): Todo?
}
但是,当使用todo?将状态设置为1时,它要求我使用null检查。status=1
问题是,我认为它不应该问我,因为在这一点上,我非常确定todo
不再是空的。是否有任何解决方法,或者我可能误解了Kotlin的某些内容?我相信您可以使变量不可为null来解决此问题。也可能是
val
val todo: Todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND)
编辑:省略返回类型也可以推断不可为空的Todo
类型
如果没有显式类型,IntelliJ建议的自动更改将顺利进行;它似乎选择保持它不被修改,而不是将其更改为不可为null,这在某种程度上违背了提示的目的
val todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND)
我相信您可以使变量不可为null来解决这个问题。也可能是
val
val todo: Todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND)
编辑:省略返回类型也可以推断不可为空的Todo
类型
如果没有显式类型,IntelliJ建议的自动更改将顺利进行;它似乎选择保持它不被修改,而不是将其更改为不可为null,这在某种程度上违背了提示的目的
val todo = todosRepository.findByUid(uid) ?: return ResponseEntity("Not found", HttpStatus.NOT_FOUND)
但是
findByUid
如果未找到,则返回null如果返回null,则该方法将立即由elvis运算符返回。如果在它之后使用?:
,则这应该不是问题。事实上,您可以尝试完全忽略显式类型,我想您会得到推断的Todo
。由于某种原因,要求我在Todo.status=1
上添加空检查的消息现在丢失了,我没有更改任何内容,它就像最后一个片段一样,没有任何警告……是的,省略返回类型也可以工作,但是findByUid
返回null如果未找到它如果它返回null,则该方法将立即由elvis运算符返回。如果在它之后使用?:
,这应该不是问题。事实上,您可以尝试完全忽略显式类型,我想您会得到推断的Todo
。由于某种原因,要求我在Todo.status=1
上添加空检查的消息现在丢失了,我没有更改任何内容,它就像最后一个代码段一样,没有任何警告……是的,忽略返回类型也可以工作