Sử dụng Android Studio và plugin Kotlin , tôi đã tìm thấy một cách dễ dàng để chuyển đổi các Java cũ Parcelable
của mình mà không cần bổ sung thêm plugin (nếu tất cả những gì bạn muốn là biến một data
lớp hoàn toàn mới thànhParcelable
, hãy chuyển đến đoạn mã thứ 4).
Giả sử bạn có một Person
lớp với tất cả các Parcelable
tấm lò hơi:
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;
}
}
Bắt đầu bằng cách loại bỏ việc Parcelable
triển khai, để lại một đối tượng Java cũ, đơn giản, (các thuộc tính phải là cuối cùng và được thiết lập bởi hàm tạo):
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;
}
}
Sau đó, hãy để Code > Convert Java file to Kotlin File
tùy chọn làm điều kỳ diệu của nó:
class Person(val firstName: String, val lastName: String, val age: Int)
Chuyển đổi này thành một data
lớp:
data class Person(val firstName: String, val lastName: String, val age: Int)
Và cuối cùng, hãy biến điều này thành một Parcelable
lần nữa. Di chuột qua tên lớp và Android Studio sẽ cung cấp cho bạn tùy chọn Add Parcelable Implementation
. Kết quả sẽ như thế này:
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)
}
}
}
Như bạn có thể thấy, việc Parcelable
triển khai là một số mã được tạo tự động được thêm vào data
định nghĩa lớp của bạn .
Ghi chú:
- Việc cố gắng chuyển đổi Java
Parcelable
trực tiếp thành Kotlin sẽ không tạo ra kết quả tương tự với phiên bản hiện tại của plugin Kotlin ( 1.1.3
).
- Tôi đã phải loại bỏ một số dấu ngoặc nhọn bổ sung mà
Parcelable
trình tạo mã hiện tại giới thiệu. Phải là một lỗi nhỏ.
Tôi hy vọng mẹo này hiệu quả với bạn cũng như nó đã làm cho tôi.