How do I create an enum from a string in Kotlin?

前端 未结 4 1545
情书的邮戳
情书的邮戳 2021-01-03 19:42

I have an enum with some instances Foo and Bar. If I have a string \"Foo\", how can I instantiate a Foo enum from that?

4条回答
  •  醉话见心
    2021-01-03 20:07

    Reusable Exception Safe Solution

    The default solution in Kotlin will throw an exception. If you want a reliable solution that works statically for all enums, try this!

    Now just call valueOf("value"). If the type is invalid, you'll get null and have to handle it, instead of an exception.

    inline fun > valueOf(type: String): T? {
        return try {
            java.lang.Enum.valueOf(T::class.java, type)
        } catch (e: Exception) {
            null
        }
    }
    

    Alternatively, you can set a default value, calling valueOf("value", MyEnum.FALLBACK), and avoid a null response. You can extend your specific enum to have the default be automatic

    inline fun > valueOf(type: String, default: T): T {
        return try {
            java.lang.Enum.valueOf(T::class.java, type)
        } catch (e: Exception) {
            default
        }
    }
    

    Or if you want both, make the second:

    inline fun > valueOf(type: String, default: T): T = valueOf(type) ?: default
    

提交回复
热议问题