使用 gson 和改造并创建了一个 JsonDeserializer。
在java中,类定义为:
public class Test implements JsonDeserializer<NavigationMenu[]> {...
在 Kotlin 中,它被定义为:
class NavigationMenuArrayDeserializer : JsonDeserializer<Array<NavigationMenu>> {...
Java 类在注册到 GSON 后按预期调用。永远不会调用 Kotlin 类。
Retrofit jsonClient = new Retrofit
.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.addConverterFactory(getGsonConverter())
.build();
...
private GsonConverterFactory getGsonConverter() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLenient();
gsonBuilder.registerTypeAdapter(NavigationMenu[].class, new NavigationMenuArrayDeserializer());
Gson gson = gsonBuilder.create();
return GsonConverterFactory.create(gson);
}
知道为什么吗?
最佳答案
不幸的是,没有任何建议对我有用。我将调用类从 java 转换为 kotlin,因为在过去,在 kotlin 中调用 java 类类型对我来说很容易工作……而且成功了。
我最初尝试从 java 类调用 kotlin 数组类的尝试仍然不成功,但我能够使配置正常工作,所以我称之为完成。
将 OP 中的配置 java 代码转换为 Kotlin 就成功了:
private val gsonConverter: GsonConverterFactory
get() {
val gsonBuilder = GsonBuilder()
gsonBuilder.setLenient()
gsonBuilder.registerTypeAdapter(Array<NavigationMenu>::class.java, NavigationMenuArrayDeserializer())
val gson = gsonBuilder.create()
return GsonConverterFactory.create(gson)
}
关于android - Kotlin 无法识别类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46529530/