JSONオブジェクトのStringフィールドから変換するために、これらのEnumクラスのすべてに対して簡単なコードを設定したいというEnumクラスのグループが5つ以上あります。Enumクラスのグループ全体でString to 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が働くことができるかどうかを考え出す苦労していますし、その定義がどうなるか、そして、それを実装する方法のようなコードを書くことができるようにしたいですEnum値のインスタンス何かアドバイス?
更新:これでコンバータが作成されました。これが最善の方法ですか?戻り値がパラメータのサブタイプなので、戻り値をキャストする必要はありません。そのような
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}")
}
== str) '? –
これは本当です。私がtoStringをこのようにオーバーライドすることを決定している限り、私は 'JsonStringConvertible'などを使用する必要はありません。 – user3175580
こんにちは、あなたのアップデートを見ました。何とかあなたを助けることができるニース。あなたの更新された質問によれば、ここで 'class'パラメータからジェネリック型を返す方法を調べることができます:http://stackoverflow.com/questions/34122450/how-to-get-type-info-for-a-generic -parameter –