当对象为空时,从Kotlin函数返回一行
我有一个Java方法,看起来像这样:
void doStuff() { MyObject myObject = myObjectRepository.findById(myObjectId); if (myObject == null) { log.warn("myObject not found, aborting"); return; } // More stuff }
有没有办法在Kotlin中做到这一点? 我在想这样的事情(这是行不通的):
fun doStuff() { // I'd like to do something here that returns from the doStuff function when myObject is null val myObject = myObjectRepository.findById(myObjectId) ?: {log.warn("myObject not found, aborting") return} // More stuff }
你能做这样的Kotlin吗?
fun doStuff() { val myObject = myObjectRepository.findById(myObjectId) ?: log.warn("myObject not found, aborting").also{ return } // More stuff }
但我同意DPM,一个经典的if-else
是更好的选择。
您可能还想考虑when
构造(取决于大小,函数的任务和返回类型):
fun doStuff() { val myObject = myObjectRepository.findById(myObjectId) return when { myObject == null -> log.warn("myObject not found, aborting") // Unit? else -> // More stuff } }
你可能更喜欢when
if-else
之上的原因之一,也是因为我发现它利用更好的空间(一个可读的if-else
使用至少4,有时5,loc),它更清晰,因为你有关键字when
在相同级别的返回(或分配,或任何),每个案件纯粹和简单,没有任何额外的关键字,只是一个非文字符号->
清楚地说明条件从代码。
但是,这also
kotlin标准库提供的扩展功能。 这是我最爱Kotlin的功能之一,它给了你很大的力量和表现力。
让我建议你这个链接 ,进一步调查和了解其他有用的功能,如run
, let
, apply
, takeUnless
和takeIf
val myObject = myObjectRepository.findById(myObjectId)?:run { log.warn("myObject not found, borting"); return } //more stuff