在Kotlin中将反射,枚举和泛型结合起来,类型推断会失败,但我也不知道

时间:2019-05-28 14:13:58

标签: java generics kotlin reflection enums

我正在使用反射来加载用于与现有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需要的),因此失败。

反射+枚举+泛型是导致编译器错误的原因吗?

任何建议如何解决此问题?

最诚挚的问候,

米歇尔

1 个答案:

答案 0 :(得分:1)

当具体的递归泛型类型未知时,可以通过抑制此错误来模拟原始类型:

@Suppress("UPPER_BOUND_VIOLATED")
val clazz = getEnumType<Enum<*>>(type)