เมื่อใช้Android Studioและปลั๊กอินKotlinฉันพบวิธีง่ายๆในการแปลง Java เก่าของฉันParcelable
โดยไม่ต้องใช้ปลั๊กอินเพิ่มเติม (หากคุณต้องการเพียงแค่เปลี่ยนdata
คลาสใหม่ให้เป็น a Parcelable
ให้ข้ามไปที่ข้อมูลโค้ดที่ 4)
สมมติว่าคุณมีPerson
ชั้นเรียนพร้อมParcelable
หม้อต้มทั้งหมด:
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;
}
}
เริ่มต้นด้วยการกำจัดParcelable
การนำไปใช้งานทิ้งวัตถุJava แบบเก่าที่ไม่มีกระดูก(คุณสมบัติควรเป็นขั้นสุดท้ายและกำหนดโดยผู้สร้าง):
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;
}
}
จากนั้นให้Code > Convert Java file to Kotlin File
ตัวเลือกทำเวทมนตร์:
class Person(val firstName: String, val lastName: String, val age: Int)
แปลงสิ่งนี้เป็นdata
คลาส:
data class Person(val firstName: String, val lastName: String, val age: Int)
และสุดท้ายลองเปลี่ยนเป็นParcelable
อีกครั้ง วางเมาส์เหนือชื่อคลาสและ Android Studio จะให้ตัวเลือกแก่Add Parcelable Implementation
คุณ ผลลัพธ์ควรมีลักษณะดังนี้:
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)
}
}
}
อย่างที่คุณเห็นการParcelable
ใช้งานเป็นโค้ดที่สร้างขึ้นโดยอัตโนมัติต่อท้ายdata
คำจำกัดความของคลาสของคุณ
หมายเหตุ:
- การพยายามแปลงJava
Parcelable
เป็นKotlinโดยตรงจะไม่ให้ผลลัพธ์เดียวกันกับปลั๊กอินKotlin ( 1.1.3
) เวอร์ชันปัจจุบัน
- ฉันต้องถอดวงเล็บปีกกาพิเศษที่ตัวสร้าง
Parcelable
รหัสปัจจุบันแนะนำ ต้องเป็นบั๊กเล็กน้อย
ฉันหวังว่าเคล็ดลับนี้จะเหมาะกับคุณเช่นเดียวกับที่ทำกับฉัน