Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin-如何知道常量对象中是否存在字符串?_Android_Kotlin_Casting - Fatal编程技术网

Android Kotlin-如何知道常量对象中是否存在字符串?

Android Kotlin-如何知道常量对象中是否存在字符串?,android,kotlin,casting,Android,Kotlin,Casting,我正在开发一个Android应用程序,我在常量文件中创建了一个对象,用于存储一些状态值。在我的一个类中,我有一个类型为Status的变量。我需要根据从后端获取的一些数据设置status的值。但是,数据是以字符串形式出现的。是否有任何方法可以检查数据字符串是否处于状态对象中,并可能将此字符串强制转换为状态 注意:可以有许多自定义类型,如Status,因此,考虑到枚举对性能的影响,我希望尽量避免枚举 考虑以下场景 // Constants.kt object Constants { ...

我正在开发一个Android应用程序,我在常量文件中创建了一个
对象
,用于存储一些状态值。在我的一个类中,我有一个类型为
Status
的变量。我需要根据从后端获取的一些数据设置status的值。但是,数据是以
字符串形式出现的。是否有任何方法可以检查数据字符串是否处于
状态
对象中,并可能将此字符串强制转换为
状态

注意:可以有许多自定义类型,如
Status
,因此,考虑到枚举对性能的影响,我希望尽量避免枚举

考虑以下场景

// Constants.kt
object Constants {
    ...
    object Status {
        const val OKAY = "okay"
        const val DONE = "done"
        const val PENDING = "pending"
    }
    ...
}


// SomeClass.kt
class SomeClass {
    private var status: Status? = null

    setStatus(status: Status) {
        this.status = status
    }
}

// SomeOtherClass.kt
fun updateStatus() {
    val someClass = SomeClass()
    val status: String = getSomeStringFromServer()
    // add some check to confirm whether status is actually one of Constants.Status
    someClass.setStatus(status) // It wouldn't work because type String and Status are incompatible
}


如果这只是一些有限的推理状态,那么您可以轻松地使用
enum

enum class Status(val value : String) {
    OKAY("okay"),
    DONE("done"),
    PENDING("pending")
}
然后,为了将服务器字符串转换为
状态

val valueFromServer = "okay"
val status : Status? = enumValues<Status>().firstOrNull { it.value == valueFromServer }
用法:

"okay".toStatus()

但是使用枚举在性能/内存方面不是很糟糕吗?特别是因为我将拥有大量这样的自定义类型?“我将拥有大量这样的自定义类型”-这在您的问题中没有提到-这只是谈论
状态
。对于问题中的示例,枚举对于受约束的有限类型来说更具声明性和明确性,与随机字符串常量类似——考虑到它们只是字符串,这是非常通用的。枚举不适用于未知类型,如果需要解析或调整,您可以在这里使用集合或其他方式解析值。我已更新了我的问题语句以增加清晰度。谢谢如果后端的字符串与
Status
类变量的on匹配,我不确定会发生什么
"okay".toStatus()