Mah*_*ban 8 android parcelable kotlin kotlin-android-extensions
我有以下课程:
@Parcelize
data class Collection<T : Parcelable> constructor(
var models: List<T>,
var cursor: String?
) : Parcelable
Run Code Online (Sandbox Code Playgroud)
当我使用 时Kotlin 1.4.10,项目正确构建,没有任何错误,然后我将项目更新为Kotlin 1.4.21,并迁移到使用kotlin-parcelize而不是kotlin-android-extensions,因此在 Kotlin 更新后,构建项目时出现以下错误:
> Task :domain:kaptDebugKotlin FAILED
/Library/DevelopmentArea/workspace/baaz_android_new/clean_domain/domain/build/tmp/kapt3/stubs/debug/com/myapp/domain/model/Collection.java:101: error: non-static type variable T cannot be referenced from a static context
public final com.myapp.domain.model.Collection<T>[] newArray(int size) {
^/Library/DevelopmentArea/workspace/baaz_android_new/clean_domain/domain/build/tmp/kapt3/stubs/debug/com/myapp/domain/model/Collection.java:110: error: non-static type variable T cannot be referenced from a static context
public final com.myapp.domain.model.Collection<T> createFromParcel(@org.jetbrains.annotations.NotNull()
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是 Android Studio 4.1.1
目前,为了修复我遇到的错误,同时继续使用 Kotlin 1.4.21,我刚刚@Parcelize从具有通用类型用法(如问题中的类型)的任何类中删除了注释,并仅Parcelable使用旧方法实现,如下所示:
data class Collection<T> constructor(
var models: List<T>,
var cursor: String?
) : Parcelable {
constructor(parcel: Parcel) : this(
mutableListOf<T>().also { list: List<T> ->
parcel.readList(list, Collection<T>::models.javaClass.classLoader)
},
parcel.readString())
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeList(models)
parcel.writeString(cursor)
}
override fun describeContents(): Int = 0
companion object {
@JvmField
val CREATOR = object : Parcelable.Creator<Collection<Parcelable>> {
override fun createFromParcel(source: Parcel): Collection<Parcelable> {
return Collection(source)
}
override fun newArray(size: Int): Array<Collection<Parcelable>?> {
return arrayOfNulls(size)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |