当对象为空时,从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的功能之一,它给了你很大的力量和表现力。

让我建议你这个链接 ,进一步调查和了解其他有用的功能,如runletapplytakeUnlesstakeIf

  val myObject = myObjectRepository.findById(myObjectId)?:run { log.warn("myObject not found, borting"); return } //more stuff