抓非法状态的不良做法例外?选择



我正在构建一个处理保存的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>

div class="ans>

根据评论中的详细说明,看起来您应该只使用 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 权限。

相关内容

  • 没有找到相关文章

最新更新