嵌套类
我们在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
网友评论