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

相关文章
相关标签/搜索