kotlin知識點記錄-序列化

Kotlin和Java的序列化都是經過實現Serializable或者Parcelable接口來完成的,只是兩種語言在具體的實現方式上有所區別,下面經過一個簡單的示例來看一下具體的區別:java

1 Java中的Parcelable

示例代碼:markdown

public class Test implements Parcelable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    protected Test(Parcel in) {
        name=in.readString();
    }

    public static final Creator<Test> CREATOR = new Creator<Test>() {
        @Override
        public Test createFromParcel(Parcel in) {
            return new Test(in);
        }

        @Override
        public Test[] newArray(int size) {
            return new Test[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
    }
複製代碼

主要關注幾個關鍵點:app

  1. Test構造函數,不要使用默認無參構造函數。使用Parcelable序列化時IDE會提示建立一個參數爲Parcel的構造函數,咱們按照提示添加就行
  2. 須要重寫Parcelable的兩個方法describeContents,writeToParcel
  3. CREATOR默認是沒有添加的,按照IDE提示添加就行,須要特別注意的是Creator泛型中的泛型類型必須和當前類保持一致

2 kotlin中的Parcelable

kotlin中使用Parcelable實現序列化有兩種方式,一種是相似Java的方式,一種是使用註解的方式。先來看一下相似Java的傳統方式:ide

傳統方式
class TestKT() :Parcelable{
    var test:String?=null

    constructor(parcel: Parcel) : this() {
        test = parcel.readString()
    }

    override fun describeContents(): Int {
        TODO("Not yet implemented")
    }

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        TODO("Not yet implemented")
    }

    companion object CREATOR : Parcelable.Creator<TestKT> {
        override fun createFromParcel(parcel: Parcel): TestKT {
            return TestKT(parcel)
        }

        override fun newArray(size: Int): Array<TestKT?> {
            return arrayOfNulls(size)
        }
    }
}
複製代碼

實現過程和Java同樣,只是語言和語法變成了kotlin。函數

再來看一下使用註解如何實現:ui

註解方式
import kotlinx.parcelize.Parcelize
@Parcelize
class TestKT() : Parcelable {
    var test:String?=null
}
複製代碼

這裏使用到了Parcelize註解,這個註解功能是在kotlin初期版本的時候被封裝到Kotlin Android Extensions插件中的。不過目前這個插件已經被廢棄不用了,相應的序列化功能也被遷移到了另一個插件id kotlin-parcelize,因此若是咱們的kotlin版本比較新,直接在app的build文件中引入kotlin-parcelize插件就能夠使用Parcelize註解了(注意要import kotlinx.parcelize包)。this

3 Java中的Serializable

Java中直接實現Serializable接口便可,無需重寫任何方法,由於Serializable是一個空接口spa

public class Test implements Serializable {
    private String name;
    

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
複製代碼

4 kotlin中的Serializable

相似Java,不須要使用任何註解插件

class TestKT() : Serializable {
    var test:String?=null
 }
複製代碼

以上就是我的總結的Java和Kotlin實現序列化的區別code

相關文章
相關標籤/搜索