我有一組大於5的Enum類,它的值中包含String參數,我想爲所有這些Enum類從JSON對象中的字符串字段進行轉換得到簡單的代碼。如何爲一組Enum類寫一個可重用的字符串轉換爲Enum值? (Kotlin)
enum class Religiousness(val jsonStr: String, val resID: Int) {
NotAtAll("none", R.string.not_religious),
Somewhat("somewhat", R.string.somewhat_religious),
Very("very", R.string.very_religious),
;
override fun toString() = jsonStr
fun displayString(res: Resources) = res.getString(resID)
}
我希望能夠寫出這樣的代碼
fun JsonConvertStrToEnum(enumClass: Class<Enum<*>>, str: String): Enum<*> {
for (enumval in enumClass.enumConstants) {
if ((enumval as IJsonStringConvertible).jsonStr() == str)
return enumval
}
throw IllegalArgumentException("Gave an invalid enum value for class ${enumClass.canonicalName}")
}
我有一個很難搞清楚,如果IJsonStringConvertible可以工作,以及它的定義是,以及如何實現它枚舉值實例。有什麼建議?
更新:我現在已經寫過這個轉換器。這是最好的方法嗎?我是否也可以表示返回值是參數的子類型,因此不需要轉換返回值?
fun JsonConvertStrToEnum(enumClass: Class<out Enum<*>>, str: String): Enum<*> {
for (enumval in enumClass.enumConstants) {
if (enumval.toString() == str)
return enumval
}
throw IllegalArgumentException("Gave an invalid enum value for class ${enumClass.canonicalName}")
}
對不起,也許愚蠢的問題,但什麼是一個問題,使用'如果(enumval.toString()== STR)'? –
這是真的 - 只要我決定像這樣覆蓋toString,我不需要使用任何'JsonStringConvertible'或類似的東西。 – user3175580
嗨,看到你的更新。很高興能以某種方式幫助你。根據你更新的問題,你可以在這裏查看,以瞭解如何從'class'參數返回泛型類型:http://stackoverflow.com/questions/34122450/how-to-get-type-info-for-a-generic - 參數 –