Ich habe ein Repository-Klasse wie folgt aus:wie NULL-Prüfung zu vermeiden
interface TodosRepository : CrudRepository<Todo, Long> {
fun findByUid(uid: String): Todo?
}
und ein Verfahren, das diese todo als erledigt markieren können:
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 fragen Sie mich das todo == null
mit einem ersetzen elvis Betreiber:
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)
aber dann fragt es mir die nULL-Prüfung zu verwenden, wenn sie den Status auf 1 wit Einstellung h todo?.status = 1
die Sache ist, dass ich denke, dass es mich nicht fragen sollte, denn an diesem Punkt bin ich mir ziemlich sicher, dass todo
nicht mehr null ist.
Gibt es eine Workaround oder ich vielleicht etwas auf Kotlin missverstanden?
aber 'findByUid' gibt null zurück, wenn es nicht –
gefunden Wenn es null zurückgibt, dann wird das Verfahren sofort vom elvis Betreiber zurück. – Naetmul
Das sollte kein Problem sein, wenn Sie '?:' Danach verwenden. In der Tat können Sie versuchen, den expliziten Typ ganz wegzulassen, ich denke, Sie werden "Todo" abgeleitet bekommen. – zsmb13