我正在使用反射来加载用于与现有Java应用程序集成的Enum类。 在Java中,它写为(在ValueUtil类中):
static <E extends Enum<E>> Class<E> getEnumType(String typeAsString) { ..reflection stuff.. }
在Kotlin中,我尝试使用此方法的结果。
private fun createEnumParameter(type: String, value: String, id: String?): EnumParameter<*> {
val clazz = getEnumType(type)
return createParam(clazz, value, id)
}
private fun <E: Enum<E>> getEnumType(type: String): Class<E> {
return ValueParseUtil.getEnumType<E>(type)
}
private fun createParam(...): ... { ... }
但是,编译器指出: Type inference error
因此,我将尽我所能指定我所知道的(Enum <*>): Enum<*> error
由于泛型中的枚举递归(这是I / Kotlin / Java需要的),因此失败。
反射+枚举+泛型是导致编译器错误的原因吗?
任何建议如何解决此问题?
最诚挚的问候,
米歇尔
答案 0 :(得分:1)
当具体的递归泛型类型未知时,可以通过抑制此错误来模拟原始类型:
@Suppress("UPPER_BOUND_VIOLATED")
val clazz = getEnumType<Enum<*>>(type)