gpt4 book ai didi

android - kotlin 绑定(bind)类引用和泛型

转载 作者:搜寻专家 更新时间:2023-11-01 08:20:30 25 4
gpt4 key购买 nike

我正在为 Android 切换到 Kotlin,但我很难理解泛型和绑定(bind)类引用的行为。在 java 中,我可以使用 Moshi 的 lib 序列化一个对象,其中包含以下几行:

    Moshi moshi = new Moshi.Builder().build();
String string = moshi.adapter(CredentialsResponse.class).toJson(body);

在 Kotlin 中:

    val moshi = Moshi.Builder().build()
var string = moshi.adapter(CredentialsResponse::class.java).toJson(body)

如果我想从一个实例中获取类,我找到了两个选项,但一个不起作用,我不明白为什么:此代码有效:

    fun testStack(body: CredentialsResponse) {
val moshi = Moshi.Builder().build()
var string = moshi.adapter(body.javaClass).toJson(body)
}

但是这段代码显示类型不匹配错误

    fun testStack(body: CredentialsResponse) {
val moshi = Moshi.Builder().build()
var string = moshi.adapter(body::class.java).toJson(body)
}

Compiler Error

据我所知,自 1.1 ( https://kotlinlang.org/docs/reference/reflection.html#bound-class-references-since-11 ) 起允许此调用,所以我错过了什么?

最佳答案

两者之间有细微的差别:

class K
val javaClass: JsonAdapter<K> = moshi.adapter(body.javaClass)
val classJava: JsonAdapter<out K> = moshi.adapter(body::class.java)

注意 body::class.java 被标记为 out

通过调用 moshi.adapter(body::class.java).toJson(body) 你试图将 body 作为 in 参数

关于android - kotlin 绑定(bind)类引用和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com