通过映射 Enum 值获取 Enum 类型总是报错 null 问题 Android Kotlin

Get Enum type by mapping Enum value always complain null issue Android Kotlin

我有枚举 class 并且我正在按值映射,当我是 return 枚举值时它总是抱怨 null 问题。

ConversationStatus.kt

enum class ConversationStatus(val status: String) {
    OPEN("open"),
    CLOSED("closed");

    companion object {
        private val mapByStatus = values().associateBy(ConversationStatus::status)
        fun fromType(status: String): ConversationStatus {
            return mapByStatus[status]
        }
    }
}

这个老是抱怨这个问题。我怎样才能解决这个问题?任何建议。谢谢

有 3 种可能的方式。 Android 正如您在屏幕截图中看到的那样,Studio 通常擅长建议修复。它建议将 return 类型更改为 ConversationStatus?,这意味着它可能 return 为空。到时候会变成这样:

companion object {
    private val mapByStatus = values().associateBy(ConversationStatus::status)
    fun fromType(status: String): ConversationStatus? {
        return mapByStatus[status]
    }
}

另一种方法是通过将 !! 添加到 return 语句来告诉编译器您确保它永远不会为 null。像这样:

companion object {
    private val mapByStatus = values().associateBy(ConversationStatus::status)
    fun fromType(status: String): ConversationStatus {
        return mapByStatus[status]!!
    }
}

如果您调用状态不是 "open""closed"

的函数,这将导致崩溃

或者,您可以提供回退值。我的意思是它 return 是一个默认值,以防您使用非 "open""closed" 的字符串调用该函数。如果你希望它是 OPEN 你可以这样做:

companion object {
    private val mapByStatus = values().associateBy(ConversationStatus::status)
    fun fromType(status: String): ConversationStatus {
        return mapByStatus[status] ?: OPEN
    }
}