如何在 Kotlin 中使用 getDeclaringClass?

How to use getDeclaringClass in Kotlin?

我有这个方法:

    protected <E extends Enum<E>> E getEnum(JSONObject jsonObject, String propertyName, E fallbackEnum)
{
    String fallbackString = GsonXelion.toJson(fallbackEnum);
    String jsonString = getString(jsonObject, propertyName, fallbackString);
    E enumUsingGson = getEnumUsingGson(jsonString, fallbackEnum.getDeclaringClass());
    return enumUsingGson != null ? enumUsingGson : fallbackEnum;
}

我尝试转换成 kotlin 并得到了这个:

  protected fun <E : Enum<E>?> getEnum(jsonObject: JSONObject, propertyName: String?, fallbackEnum: E): E {
    val fallbackString = toJson(fallbackEnum)
    val jsonString = getString(jsonObject, propertyName, fallbackString)
    val enumUsingGson: E = getEnumUsingGson(jsonString, fallbackEnum.getDeclaringClass())
    return enumUsingGson ?: fallbackEnum
}

并且 getDeclaringClass() 在 kotlin 中不被识别。我尝试使用 fallbackEnum::class.java 但随后出现此错误:

我做错了什么?

您尝试像这样调用它: getEnumUsingJson(String, Class<E>)。但是,在 java 代码中,您使用以下代码调用它:getEnumUsingJson(String, Class<declaring class of E>。所以,它不兼容,它是其他 class,并且编译失败,因为扣除的类型与任何可能的签名都不兼容。

所以,尝试在 kotlin 中做同样的事情——传递的不是 E class,而是声明 E 的 class: getEnumUsingJson(jsonString, fallbackEnum::class.java.declaringClass) 您在 Java.

中使用的代码的等效项是什么