How would you rewrite the following Java code in Kotlin?
@SuppressWarnings({ "unchecked", "rawtypes" })
static Object getEnumValue(String enumClassName, String enumValue) throws ClassNotFoundException {
Class<Enum> enumClz = (Class<Enum>)Class.forName(enumClassName);
return Enum.valueOf(enumClz, enumValue);
}
有问题的一行是Enum.valueOf(enumClz, enumValue)
IntelliJ IDE/Android Studio的自动转换会产生以下Enum.valueOf<Enum>(enumClz, enumValue)
个结果,但是Kotlin中没有这样的方法Enum.valueOf
.
Forcing Kotling to use java.lang.Enum
: java.lang.Enum.valueOf<Enum>(enumClz, enumValue)
. Compile error on the generic binding One type argument expected for class Enum<E: Enum<E>>
.
将类型参数添加为java.lang.Enum.valueOf<Enum<*>>(enumClz, enumValue)
会产生另一个错误:Type argument is not within its bounds. Expected: Enum<Enum<*>!>! Found: Enum<*>
.