如何在 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.
中使用的代码的等效项是什么
我有这个方法:
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.