kotlin精讲-第3章(4)嵌套类&数据类

作者: 739c8d412b4c | 来源:发表于2017-12-05 09:23 被阅读207次

    嵌套类

    我们在Kotlin内部还可以定义类,这样的类,我们可以称为嵌套类(nestedclasses)。嵌套类分成两种类型,一种是不通过Inner关键字修饰的嵌套类,一种是通过Inner关键字修饰的嵌套类。两者的区别主要体现在类的创建以及对外部内属性的访问上。

    我们先看不通过Inner关键字修饰的嵌套类,这样的嵌套类,不能访问外部类的成员属性,这样的嵌套类,在创建的时候,不需要先创建外部类对象。参考代码:

    针对以上代码我们看第11行创建嵌套类对象的时候,不用先创建外部类对象。同时,嵌套类不能访问外部类成员属性,参考代码:

    我们再看通过Inner关键字修饰的嵌套类,这样的嵌套类,能访问外部类的成员属性,这样的嵌套类,在创建的时候,需要先创建外部类对象。参考代码:

    数据类

    Kotlin在类创建方面花了很多心思,让我们创建类变的非常方便,简化了代码。Kotlin还为我们提供了一种特定的类,数据类。在类定义的时候,通过在最前面加上data关键字,就可以标明这个类是一个数据类。如果一个类被标明为数据类,编译器在编译的时候会自动帮我们覆写常用的toString、hashCode、equals、copy、comopinentX方法。

    toString方法,方便做日志输出,非常方便。

    hashCode、equals方法,方便对象比较,非常方便。

    copy方法,方便做对象复制,非常方便。

    comopinentX方法,可以很方面的解析对象包含的变量,非常强大。

    比如,我们把包含name属性和age属性的Person类,定义为数据类,参考代码:

    显然,数据类可是大大提高了生产力,为了验证编译器的生成情况,我们可以查看Kotlin编译转换的字节码文件对应Java文件的Structure,参考截图:

    针对以上代码的第33行重点去说一下,这种做法,称作Kotlin的解析析构,可以把一个对象的值赋值给多个变量,要求这个类中包含comopinentX方法,比如,我们这里的Person包含了component1方法和component2方法。对于如下的写法

    image.png

    相关文章

      网友评论

        本文标题:kotlin精讲-第3章(4)嵌套类&数据类

        本文链接:https://www.haomeiwen.com/subject/axdqixtx.html