Mit Android Studio und dem Kotlin- Plugin habe ich eine einfache Möglichkeit gefunden, meine alten Java- ParcelableDateien ohne zusätzliche Plugins zu konvertieren (wenn Sie nur eine brandneue dataKlasse in eine verwandeln möchtenParcelable , fahren Sie mit dem 4. Code-Snippet fort).
Angenommen, Sie haben eine PersonKlasse mit der gesamten ParcelableKesselplatte:
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;
}
}
Entfernen Sie zunächst die ParcelableImplementierung und lassen Sie ein einfaches, einfaches, altes Java- Objekt übrig (die Eigenschaften sollten endgültig sein und vom Konstruktor festgelegt werden):
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;
}
}
Dann lassen Sie die Code > Convert Java file to Kotlin FileOption ihre Magie tun:
class Person(val firstName: String, val lastName: String, val age: Int)
Wandle dies in eine dataKlasse um:
data class Person(val firstName: String, val lastName: String, val age: Int)
Und zum Schluss machen wir daraus noch Parcelableeinmal eine. Bewegen Sie den Mauszeiger über den Klassennamen und Android Studio sollte Ihnen die Option dazu geben Add Parcelable Implementation. Das Ergebnis sollte folgendermaßen aussehen:
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)
}
}
}
Wie Sie sehen können, handelt es sich bei der ParcelableImplementierung um einen automatisch generierten Code, der an Ihre dataKlassendefinition angehängt wird .
Anmerkungen:
- Der Versuch, ein Java
Parcelable direkt in Kotlin zu konvertieren, führt nicht zum gleichen Ergebnis wie die aktuelle Version des Kotlin- Plugins ( 1.1.3).
- Ich musste einige zusätzliche geschweifte Klammern entfernen, die der aktuelle
ParcelableCodegenerator einführt. Muss ein kleiner Fehler sein.
Ich hoffe, dieser Tipp funktioniert für Sie genauso gut wie für mich.