ELevel是Koltin顶部函数中的枚举类,但代码A是硬代码。
所以我试着使用代码B,但是它是错误的,我如何修复它呢?
码A
enum class ELevel(val label:String){
Whisper("Whisper"),
Quiet("Quiet Library")
}码B
enum class ELevel(val label:String){
Whisper(getApplicationContext().getString(R.String.Whisper)),
Quiet(getApplicationContext().getString(R.String.Quiet))
}
<resources>
<string name="Whisper">Whisper</string>
<string name="Quiet">Quiet Library</string>
</resources>发布于 2022-03-12 14:53:03
我会这样做:
enum class ELevel(private val labelId: Int){
Whisper(R.string.whisper),
Quiet(R.string.quiet);
fun getLabel(context: Context) =
context.getString(labelId)
}缺点是每次都必须传递一个上下文实例,但这是更安全的方法。
另一种方法是这样做:
enum class ELevel(private val labelId: Int){
Whisper(R.string.whisper),
Quiet(R.string.quiet);
lateinit var label: String
private set
companion object {
fun initialize(context: Context) {
for (value in EValue.values()) value.label = context.getString(value.labelId)
}
}
}然后在你的MainActivity.onCreate()中,打电话给ELevel.initialize(applicationContext)。但是,您必须小心,不要在运行在label之前的任何代码中使用onCreate()属性,比如在属性初始化器中。如果在任何服务中使用枚举,则需要在应用程序子类的onCreate()中调用onCreate(),但是需要小心this issue。
https://stackoverflow.com/questions/71450002
复制相似问题