在kotlin中重写下面的代码会有什么更优雅的方法.
if (xList.isEmpty()) {
throw SomeException("xList was empty")
}
Run Code Online (Sandbox Code Playgroud)
我们有一个throwif运算符吗?
crg*_*dos 16
我喜欢使用takeIf标准函数来进行验证,并加上elvis运算符,它可以实现以下功能:
xList.takeIf{ it.isNotEmpty() } ?: throw SomeException("xList was empty")
Run Code Online (Sandbox Code Playgroud)
我必须补充一点,在大多数情况下,这IllegalArgumentException是我所需要的,并且使用起来更简单require。
如果我们需要一个IllegalStateException,我们宁可使用check。
另请参见:checkNotNull,requireNotNull,错误
bwt*_*bwt 12
还有另一个建议,简洁且不需要额外的代码:
xList.isNotEmpty() || throw SomeException("xList was empty")
Run Code Online (Sandbox Code Playgroud)
它之所以有效,是因为throw是一个表达式,其类型Nothing是所有内容的子类型,包括Boolean.
在Kotlin库中,如果输入无效,则存在抛出异常的函数,例如
requireNotNull(T?, () -> Any).如果需要,您可以参考这些函数并编写类似的函数来处理空列表.
public inline fun <T> requireNotEmpty(value: List<T>?, lazyMessage: () -> Any): List<T> {
if (value == null || value.isEmpty()) {
val message = lazyMessage()
throw IllegalArgumentException(message.toString())
} else {
return value
}
}
//Usage:
requireNotEmpty(xList) { "xList was empty" }
Run Code Online (Sandbox Code Playgroud)
或者只是使用require(Boolean, () -> Any):
require(!xList.isEmpty()) { "xList was empty" }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3944 次 |
| 最近记录: |