KeyNotFoundException vs 在 Kotlin 中返回 null



我正在尝试决定 Kotlin 接口中的一个函数,该函数根据 give 键从配置中读取值。这两个选项将是

/**
* Reads a configuration value for the specified key.
* @param key The key to the configuration value to retrieve
* @return The configuration value if the key is present, exception otherwise
*/
fun readValue(key: String): String
/**
* Reads a configuration value for the specified key.
* @param key The key to the configuration value to retrieve
* @return The configuration value if the key is present, null otherwise
*/
fun readValue(key: String): String?

其中,如图所示,主要区别在于引发异常或返回 null 值。

鉴于我在 Java 和 C# 方面的背景,编写第二种形式并要求调用者在获取值之前检查 null 对我来说很自然,但是我不确定这是否适用于 Kotlin,或者有尽可能避免返回 null 值的一般偏好。

在 Kotlin 中,你有不错的空处理。所以反对Java,没必要避免null,你可以拥抱它。

所以我会选择你的第二个选项,让你的 API 的消费者自己决定。

他们可以使用猫王操作员:

val value = readValue("key") ?: "";
val value2 = readValue("key2") ?: throw IllegalArgumentException();

或者添加他们要使用的确切扩展方法。

fun Repository.readOrEmpty(key:String):String {
return this.readValue(key)?:""
}
fun Repository.readOrElse(key:String, defaultValue:String):String {
return this.readValue(key)?:defaultValue
}
fun Repository.readOrThrow(key:String):String {
return this.readValue(key)?:throw IllegalArgumentException();
}

如果您选择第一个选项,这两种用法都会很尴尬/不可能。

相关内容

  • 没有找到相关文章

最新更新