我有此方法:
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>
来调用它。因此,它不兼容,是另一个类,并且编译失败,因为扣除的类型与任何可能的签名都不兼容。