Data Class 接受一个参数并枚举它来创建第二个参数
Data Class takes in One parameter and Enums that to create second parameter
正在尝试写入一个数据 class,该数据将具有两个值,一个用于语言代码,一个用于显示名称。我需要根据代码更改显示名称。我们从 Feed 返回的值并不是我们使用的所有值的正确显示名称。所以我需要一些东西来比较 languageDisplay 和枚举中的内容,然后如果它在枚举中则更改 languageDisplay。下面的代码是我的开始,但现在卡住了:
data class ClosedCaptionOn(
val languageCode: String,
val languageDisplay: String
) : ClosedCaptionOptions(){
constructor(languageCode: String) : this(languageCode, ??? )
}
enum class ClosedCaptionLanguages(val code: String) {
eng("English"), zho("Chinese")
}
您的枚举有几个命名问题。看起来你的值名称是代码,属性 是显示名称,但你调用了 属性 code
。此外,为枚举 class 名称使用复数词很奇怪,因为您传递的类型代表单个对象。
您可以添加一个伴生对象函数来提供一个帮助程序来查找显示名称或在代码不在枚举中时提供一些默认值。如果没有对应的枚举值,valueOf
会抛出异常,这是对的。
enum class ClosedCaptionLanguage(val displayName: String) {
eng("English"), zho("Chinese");
companion object {
fun displayNameFor(code: String, default: String = "Unsupported") =
runCatching { valueOf(code) }.getOrNull() ?: default
}
}
data class ClosedCaptionOn(
val languageCode: String,
val languageDisplay: String
) : ClosedCaptionOptions(){
constructor(languageCode: String) : this(languageCode, ClosedCaptionLanguage.displayNameFor(languageCode))
}
正在尝试写入一个数据 class,该数据将具有两个值,一个用于语言代码,一个用于显示名称。我需要根据代码更改显示名称。我们从 Feed 返回的值并不是我们使用的所有值的正确显示名称。所以我需要一些东西来比较 languageDisplay 和枚举中的内容,然后如果它在枚举中则更改 languageDisplay。下面的代码是我的开始,但现在卡住了:
data class ClosedCaptionOn(
val languageCode: String,
val languageDisplay: String
) : ClosedCaptionOptions(){
constructor(languageCode: String) : this(languageCode, ??? )
}
enum class ClosedCaptionLanguages(val code: String) {
eng("English"), zho("Chinese")
}
您的枚举有几个命名问题。看起来你的值名称是代码,属性 是显示名称,但你调用了 属性 code
。此外,为枚举 class 名称使用复数词很奇怪,因为您传递的类型代表单个对象。
您可以添加一个伴生对象函数来提供一个帮助程序来查找显示名称或在代码不在枚举中时提供一些默认值。如果没有对应的枚举值,valueOf
会抛出异常,这是对的。
enum class ClosedCaptionLanguage(val displayName: String) {
eng("English"), zho("Chinese");
companion object {
fun displayNameFor(code: String, default: String = "Unsupported") =
runCatching { valueOf(code) }.getOrNull() ?: default
}
}
data class ClosedCaptionOn(
val languageCode: String,
val languageDisplay: String
) : ClosedCaptionOptions(){
constructor(languageCode: String) : this(languageCode, ClosedCaptionLanguage.displayNameFor(languageCode))
}