我有一个看起来像这样的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
}
你能做这样的事吗?
答案 0 :(得分:4)
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个,位置)它更清晰,因为你有一个关键字when
处于同一级别的返回(或分配,或其他),每个案例纯粹而简单,没有任何额外的关键字,只是一个非文字符号->
明确说明了代码中的条件。
但是,also
是kotlin标准库提供的扩展函数。
这是我最喜欢Kotlin的功能之一,它为您提供了很多力量和表现力。
我建议您link进一步调查并详细了解其他有用的功能,例如run
,let
,apply
,takeUnless
和{ {1}}
答案 1 :(得分:4)
val myObject = myObjectRepository.findById(myObjectId)?:run {
log.warn("myObject not found, aborting"); return
}
//more stuff