我正在构建一个处理保存的Wi-Fi信息的Android应用程序。我有一个函数,它返回 WifiEntry 对象的 ArrayList,但如果它无法访问 Wi-Fi 配置文件(例如,如果 root 访问权限不可用(,它将返回 null。目前,我正在这样处理它:
wifiEntries = try {
WifiEntryLoader().readOreoFile()
} catch (e: IllegalStateException) {
// Important irelevant stuff
ArrayList()
}
我的问题是:有没有比捕获 IllegalStateException 更"好"的方法来处理空的可能性?我不想两次调用我的加载器函数。据我所知,我不能使用 Elvis 运算符来运行代码,除非我将其与 if 表达式(丑陋和 hacky(一起使用<</p>
根据评论中的详细说明,看起来您应该只使用 Elvis 运算符并emptyList
:
wifiEntries = WifiEntryLoader().readOreoFile() ?: emptyList()
详细阐述一下 zsmb13 的答案 - Kotlin 和 Java 有两个不同的运算符,看起来非常相似。Java有三元条件运算符,它基本上是内联if-then-else的简写符号。
// java
Integer test = nullable != null ? nullable : defaultValue;
Kotlin 的二进制"猫王运算符"允许您轻松定义默认值。如果左操作数为 null,则返回右操作数。
// kotlin
val nullable: Any? = ...
val defaultValue: Any = ...
val test1: Any = if(nullable != null) nullable else defaultValue
// alternatively
val test2: Any = nullable ?: defaultValue
但是,通过返回空列表来处理您的情况似乎不合适。您应该考虑抛出异常,以便调用方法可以处理此错误,例如通过显示一个对话框通知用户他可能缺少 root 权限。