Quelqu'un peut-il s'il vous plaît expliquer comment migrer vers le nouveakotlin-parcelize
?
J'ai essayé:
apply plugin: 'kotlin-Android-extensions'
avec apply plugin: 'kotlin-parcelize'
dans l'application build.gradleimport kotlinx.Android.parcel.Parcelize
avec import kotlinx.parcelize.Parcelize
Ce dernier mène à
Class 'ParcelZonedDateTime' is not abstract and does not implement abstract member public abstract fun describeContents(): Int defined in Android.os.Parcelable
un G. Ce code:
import androidx.annotation.Keep
import kotlinx.parcelize.Parcelize
import org.threeten.bp.ZonedDateTime
@Keep
@Parcelize
data class ParcelZonedDateTime(var value: ZonedDateTime?) :Parcelable {
override fun toString(): String {
return value.toString()
}
}
Alors, comment migrer vers le nouveau kotlin-parcelize
?
Mise à jour:
Basé sur les commentaires: Oui, je suis sur Kotlin 1.4.20 (qui est plus récent que 1,4.20-m2) .Ckyzer a raison que l'erreur dans le IDE ( n'est pas Résumé et n'en mettant pas implémenter des membres abstraits abstraits Abstract Critchecontents ()) peut et doit être ignoré. Pourtant, j'ai un problème où j'utilise des génériques:
import Android.os.Parcelable
import kotlinx.parcelize.Parcelize
sealed class MyDialogEvent {
@Parcelize
data class Confirmed<T: Parcelable>(val identity: String, val data: T) : Parcelable
}
Le code généré pour cela est
@kotlin.Metadata(mv = {1, 4, 1}, bv = {1, 0, 3}, k = 3)
public static final class Creator implements Android.os.Parcelable.Creator<com.example.stackoverflow.MyDialogEvent.Confirmed> {
public Creator() {
super();
}
@org.jetbrains.annotations.NotNull()
@Java.lang.Override()
public final com.example.stackoverflow.MyDialogEvent.Confirmed<T>[] newArray(int size) {
return null;
}
@org.jetbrains.annotations.NotNull()
@Java.lang.Override()
public final com.example.stackoverflow.MyDialogEvent.Confirmed<T> createFromParcel(@org.jetbrains.annotations.NotNull()
Android.os.Parcel in) {
return null;
}
}
et pendant la compilation, j'obtiens cette erreur pour cela (les numéros de ligne ne correspondent pas au code de l'échantillon, mais vous pouvez facilement identifier les lignes correspondantes en comparant les noms de méthodes):
MyDialogEvent.Java:167: error: non-static type variable T cannot be referenced from a static context
public final com.example.stackoverflow.MyDialogEvent.Confirmed<T>[] newArray(int size) {
MyDialogEvent.Java:173: error: non-static type variable T cannot be referenced from a static context
public final com.example.stackoverflow.MyDialogEvent.Confirmed<T> createFromParcel(@org.jetbrains.annotations.NotNull()
Après une vérification ultérieure, je pense que Parcelable
Type générique avec la construction de colis ne parvient pas à compiler car T class
ne peut pas être déterminé de manière générique à partir de celle-ci référence .
Peut-être qu'un énum pourrait être le dernier recours.