捕获IllegalStateException的不良做法?备择方案?

问题描述 投票:0回答:2

我正在构建一个处理已保存的Wi-Fi信息的Android应用。我有一个返回WifiEntry对象的ArrayList的函数,但如果它无法访问Wi-Fi配置文件(例如,如果root访问不可用),则返回null。目前,我正在处理它:

wifiEntries = try {
     WifiEntryLoader().readOreoFile()
} catch (e: IllegalStateException) {
     // Important irelevant stuff
     ArrayList()
}

我的问题是:是否有一种“更好”的方法来处理null的可能性而不是捕获IllegalStateException?我不想两次调用我的加载器功能。据我所知,我不能使用Elvis运算符来运行代码,除非我使用if表达式(丑陋和hacky)

null kotlin illegalstateexception convention
2个回答
3
投票

基于评论中的详细说明,看起来您应该只使用Elvis运算符和emptyList

wifiEntries = WifiEntryLoader().readOreoFile() ?: emptyList()

0
投票

为了详细说明zsmb13的答案--Kotlin和Java有两个不同的运算符,看起来非常相似。 Java有三元条件运算符,它基本上是内联if-then-else的简写符号。

// java
Integer test = nullable != null ? nullable : defaultValue;

Kotlin的二进制“Elvis运算符”允许您轻松定义默认值。如果左操作数为null,则返回右操作数。

// kotlin
val nullable: Any? = ...
val defaultValue: Any = ...

val test1: Any = if(nullable != null) nullable else defaultValue
// alternatively
val test2: Any = nullable ?: defaultValue

但是,通过返回空列表来处理您的情况似乎是不合适的。您应该考虑抛出异常,以便调用方法可以处理此错误,例如通过显示一个对话框通知用户他可能缺少root权限。

© www.soinside.com 2019 - 2024. All rights reserved.