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