枚举:
基本上跟Java的差不多,这里就过一遍既可,如下:
还可以接收参数,如下:
枚举还可以定义方法,如下:
看下错误提示:
所以可以这样:
然后咱们再冒号之前定义对象,如下:
下面来使用一下:
当然还可以用Kotlin提供的语法糖来更加精简的进行遍历,如下:
对象声明:
我们之前学过对象表达式,用来解决Java匿名内部类的,其格式如:
而对象声明是这样的:
咱们使用一下:
由于它本身就是对象了,所以直接调用里面的方法,另外它也可以实现一个接口,如下:
其实这个在之前的伴生对象中已经学习过了,回忆一下:
这里做个复习,接下来得梳理下对象表达式跟对象声明的区别:
1、对象表达式是立刻初始化或是执行的。
2、对象声明是延迟初始化的,在首次访问的时候进行。
3、伴生对象是在其所对应的类被加载时初始化的,对应于Java的静态初始化。
委托[delegation]:
我们用Java可以实现委托的功能,但是在Kotlin这个语言直接就已经支持了这个东东,这个在Java是不存在的,所谓委托很好理解:本来叫A去做事,而A自己不去做它将其委托给B去做。下面先来看一下类委托:
要是在Java中我们还得传递引用自己来写逻辑,而在Kotlin中直接从语法角度就支持了委托,还是挺强大的。接下来再做一个实验,假如MyClass自己也定义了一个相同的myPrint(),那结果如何呢?下面试一下:
那有个疑问:这个委托背后的原理是啥呢?下面先用文字描述一下:“by关键字后面的对象实际上会被存储在类的内部,编译器则会将父接口中的所有方法都实现出来,并且将实现转移给委托对象来去进行。”下面来反编译一下来论证这点: