Kotlin将问题与gson分开

时间:2017-11-21 04:41:10

标签: kotlin gson parcelable json-deserialization

我正在使用@parcelize for gson

这是我的班级

@Parcelize
data class CommunityModel(@SerializedName("post") val post: PostModel,
                                   @SerializedName("is_liked") val isLiked: Boolean,
                                   @SerializedName("post_like") val postLike: QuestionModel,
                                   @SerializedName("polling_options") val pollingOptions: List<PollingModel>,
                                   @SerializedName("post_polled") val postPolled: Boolean) : Parcelable

我收到错误Unable to invoke no-args constructor for class. Register an InstanceCreator with Gson for this type may fix this problem.

但此错误仅出现在较旧的Android版本(低于5.0)

我尝试了实现默认构造函数:

constructor: this(PostModel(), true, QuestionModel(), emptyList(), true)

但它给了我java.lang.VerifyError而不是

我正在使用retrofit2和rxjava2和gson转换器版本 2.3

我的kotlin版本 1.1.51

它知道bug吗?或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

No-arg编译器插件

no-arg编译器插件为具有特定注释的类生成额外的零参数构造函数。

生成的构造函数是合成的,因此不能直接从Java或Kotlin调用,但可以使用反射调用它。

这允许Java Persistence API(JPA)实例化数据类,尽管从Kotlin或Java的角度来看它没有零参数构造函数(参见下面的kotlin-jpa插件的描述)。 / p>

在Gradle中使用

用法非常类似于全开。

添加插件并指定注释列表,这些注释必须导致为带注释的类生成无参数构造函数。

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

apply plugin: "kotlin-noarg"

来源https://kotlinlang.org/docs/reference/compiler-plugins.html