Menggunakan Android Studio dan Kotlin Plugin, saya menemukan cara mudah untuk mengkonversi lama saya Java Parcelables dengan tidak ada plugin tambahan (jika semua yang Anda inginkan adalah untuk mengubah merek baru datakelas menjadi Parcelable, melompat ke potongan kode 4).
Katakanlah Anda memiliki Personkelas dengan semua Parcelablepelat ketel:
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;
}
}
Mulailah dengan menghapus Parcelableimplementasi, meninggalkan objek Java lama, polos, dan polos (properti harus final dan disetel oleh konstruktor):
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;
}
}
Kemudian biarkan Code > Convert Java file to Kotlin Fileopsi melakukan keajaibannya:
class Person(val firstName: String, val lastName: String, val age: Int)
Ubah ini menjadi datakelas:
data class Person(val firstName: String, val lastName: String, val age: Int)
Dan akhirnya, mari kita ubah ini menjadi Parcelablelagi. Arahkan kursor ke nama kelas dan Android Studio akan memberi Anda opsi untuk Add Parcelable Implementation. Hasilnya akan terlihat seperti ini:
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)
}
}
}
Seperti yang Anda lihat, Parcelableimplementasinya adalah beberapa kode yang dibuat secara otomatis yang ditambahkan ke datadefinisi kelas Anda .
Catatan:
- Mencoba mengonversi Java
Parcelable secara langsung ke Kotlin tidak akan menghasilkan hasil yang sama dengan versi plugin Kotlin ( 1.1.3) saat ini.
- Saya harus menghapus beberapa tanda kurung kurawal ekstra yang
Parcelablediperkenalkan oleh pembuat kode saat ini . Pasti ada bug minor.
Saya harap tip ini bekerja untuk Anda dan juga untuk saya.