gpt4 book ai didi

android - Kotlin 序列化中的泛型产生编译时错误

转载 作者:行者123 更新时间:2023-12-04 13:27:01 28 4
gpt4 key购买 nike

我在编译也是通用的序列化数据类时遇到问题。我对 Android 和 Kotlin 很陌生,但我是一位经验丰富的 iOS/Swift 开发人员(不要反对我)。
我正在尝试围绕 GraphQL 响应设置一个通用数据类包装器,它可以返回数据字段中的 T 泛型或错误字段中的错误。

import kotlinx.serialization.Serializable

@Serializable
data class GraphQLResponse<T:Serializable> (
val errors : List<ErrorResponse>? = null,
val data : Map<String, T>? = null
) {
@Serializable
data class Location(
val line: Int? = 0,
val column: Int? = 0,
val sourceName: String? = null
)

@Serializable
data class ErrorResponse(
val locations: List<Location>? = null,
val errorType: String? = null,
val message: String? = null
)
}
编译这个我得到以下错误:
java.lang.AssertionError: Couldn't load KotlinClass from /Users/brett/Development/Company/android/app/build/tmp/kotlin-classes/debug/com/company/company/network/GraphQLResponse.class; it may happen because class doesn't have valid Kotlin annotations
还有一堆关于反射的警告。
我想用泛型和序列化做些什么?我需要编写自己的反序列化方法吗?
任何帮助和建议将不胜感激。

最佳答案

您需要为类型 T 提供自定义序列化程序。
检查这个guide
(顺便说一句,在您的代码中,类型 T 不应该是 Serializable - T:Serializable 。这只是注释)
有类似的问题,查看this出去。
但是,如您所见,如果您在项目中使用 kapt,即使您提供了序列化程序,它也可能无法正常工作。
我找到了 comment从序列化存储库:

However, due to the mentioned kapt issue, it's impossible for now. Probably, a viable workaround can be to move models and serializers to the separate Gradle module, which is not processed by kapt.


还有更多关于这个问题的问题:
  • https://github.com/Kotlin/kotlinx.serialization/issues/1148
  • https://github.com/Kotlin/kotlinx.serialization/issues/685
  • https://github.com/Kotlin/kotlinx.serialization/issues/1313
  • 关于android - Kotlin 序列化中的泛型产生编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67880625/

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