En utilisant Android Studio et le plugin Kotlin , j'ai trouvé un moyen simple de convertir mes anciens Java Parcelables sans plugins supplémentaires (si tout ce que vous voulez est de transformer une toute nouvelle dataclasse en un Parcelable, passez au 4ème extrait de code).
Disons que vous avez une Personclasse avec toute la Parcelableplaque de la chaudière:
public class Person implements Parcelable{
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
private final String firstName;
private final String lastName;
private final int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
protected Person(Parcel in) {
firstName = in.readString();
lastName = in.readString();
age = in.readInt();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(firstName);
dest.writeString(lastName);
dest.writeInt(age);
}
@Override
public int describeContents() {
return 0;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
}
Commencez par supprimer l' Parcelableimplémentation, en laissant un vieil objet Java pur et simple (les propriétés doivent être définitives et définies par le constructeur):
public class Person {
private final String firstName;
private final String lastName;
private final int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
}
Ensuite, laissez l' Code > Convert Java file to Kotlin Fileoption faire sa magie:
class Person(val firstName: String, val lastName: String, val age: Int)
Convertissez ceci en une dataclasse:
data class Person(val firstName: String, val lastName: String, val age: Int)
Et enfin, transformons cela en un Parcelablenouveau. Passez la souris sur le nom de la classe et Android Studio devrait vous donner la possibilité de Add Parcelable Implementation. Le résultat devrait ressembler à ceci:
data class Person(val firstName: String, val lastName: String, val age: Int) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString(),
parcel.readInt()
)
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(firstName)
parcel.writeString(lastName)
parcel.writeInt(age)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Person> {
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
Comme vous pouvez le voir, l' Parcelableimplémentation est un code généré automatiquement ajouté à votre datadéfinition de classe.
Remarques:
- Essayer de convertir un Java
Parcelable directement en Kotlin ne produira pas le même résultat avec la version actuelle du plugin Kotlin ( 1.1.3).
- J'ai dû supprimer quelques accolades supplémentaires que le
Parcelablegénérateur de code actuel introduit. Doit être un bug mineur.
J'espère que cette astuce fonctionnera pour vous aussi bien que pour moi.