枚举:

基本上跟Java的差不多,这里就过一遍既可,如下:

还可以接收参数,如下:

枚举还可以定义方法,如下:

看下错误提示:

所以可以这样:

然后咱们再冒号之前定义对象,如下:

下面来使用一下:

当然还可以用Kotlin提供的语法糖来更加精简的进行遍历,如下:

对象声明:

我们之前学过对象表达式,用来解决Java匿名内部类的,其格式如:

而对象声明是这样的:

咱们使用一下:

由于它本身就是对象了,所以直接调用里面的方法,另外它也可以实现一个接口,如下:

其实这个在之前的伴生对象中已经学习过了,回忆一下:

这里做个复习,接下来得梳理下对象表达式跟对象声明的区别

1、对象表达式是立刻初始化或是执行的。

2、对象声明是延迟初始化的,在首次访问的时候进行。

3、伴生对象是在其所对应的类被加载时初始化的,对应于Java的静态初始化。

委托[delegation]:

我们用Java可以实现委托的功能,但是在Kotlin这个语言直接就已经支持了这个东东,这个在Java是不存在的,所谓委托很好理解:本来叫A去做事,而A自己不去做它将其委托给B去做。下面先来看一下类委托:

要是在Java中我们还得传递引用自己来写逻辑,而在Kotlin中直接从语法角度就支持了委托,还是挺强大的。接下来再做一个实验,假如MyClass自己也定义了一个相同的myPrint(),那结果如何呢?下面试一下:

那有个疑问:这个委托背后的原理是啥呢?下面先用文字描述一下:“by关键字后面的对象实际上会被存储在类的内部,编译器则会将父接口中的所有方法都实现出来,并且将实现转移给委托对象来去进行。”下面来反编译一下来论证这点:

Kotlin枚举与委托深入详解的更多相关文章

  1. Kotlin——基础的函数/方法详解

    对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...

  2. C#委托使用详解(Delegates)

    摘要 委托是C#编程一个非常重要的概念,也是一个难点.本文将系统详细讲解委托. 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的 ...

  3. java中枚举类的使用详解

    /* * 通过JDK5提供的枚举来做枚举类 */ public enum Direction2 { FRONT("前"), BEHIND("后"), LEFT( ...

  4. 枚举基类Enum详解

    本文主要是对枚举类型的基类Enum类做一个介绍: 首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使 ...

  5. javascript事件委托机制详解

    以个人前端工作面试经历来看,javascript事件委托是问的最多的一类题目之一,熟悉事件委托能够了解你对于javascript的掌握程度. 面试官可能问一下问题,现在有5个li待办事件,需要实现当点 ...

  6. C#委托+回调详解

    今天写不完,明天会接着写的,,,, 学习C#有一段时间了,不过C#的委托+回调才这两天才会用,以前只是知道怎么用.前面的一篇文章,函数指针,其实是为这个做铺垫的,说白了委托就相当于C语言中的函数指针, ...

  7. C#中常见的系统内置委托用法详解(抄录)

    C#中常见的系统内置委托 Action类.Func类.Predicate<T>.Comparison<T>委托 Action类的委托 Action委托 封装一个方法,该方法不具 ...

  8. 【C#】C#委托使用详解(Delegates)

    摘要 委托是C#编程一个非常重要的概念,也是一个难点.本文将系统详细讲解委托. 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的 ...

  9. Kotlin匿名函数与闭包详解

    Lambda表达式实例演练: 继续先来编写一些Lambda表达式相关的代码: 接下来想从上面的字符串数组中找到带有"h"的字符串并打印出来: 如果学习了Java8的Lambda表达 ...

随机推荐

  1. VS2010 C#添加水晶报表及设计

    添加并设计水晶报表. [1]在VS中添加水晶报表 右击项目-->添加-->组件-->Crystal Report,输入文件名称“CrystallistReport”,如下图所示: 此 ...

  2. npm创建angular项目

    1.首先保证你本地的 node 环境 是ok的哦. 2.安装 angular-cli    命令  npm install -g @angular/cli.安装完成后,ng version 查看版本, ...

  3. 面试之leetcode链表

    1 数组 (1)数组的插入 如果是插入到最后,那么不用移动O(1),如果插入位置在中间为O(n).所以最好O(1),最坏O(N),平均O(N),为了插入能达到O(1),插入O(1).引入了链表 2 链 ...

  4. win10锁住鼠标和键盘操作。

    以前做的一个winform自动更新程序没考虑到程序在更新过程中禁止操作被更新程序.现在加上了更新过程中锁住鼠标和大部分键盘. 碰到问题:用系统api -- BlockInput(true)锁住屏幕无效 ...

  5. 在ensp上利用单臂路由实验VLAN间路由

    我们为什么要设置单臂路由? 因为我们要解决不同vlan,不同网络的PC机间的通信问题~ 那它为啥叫单臂路由嘞? 单臂路由的原理时通过一台路由器,使vlan间互通数据通过路由器进行三层转发,如果在路由器 ...

  6. 【剑指offer】面试题 8. 二叉树的下一个结点

    面试题 8. 二叉树的下一个结点 NowCoder 题目描述 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指 ...

  7. docker容器中用户自定bridge网络与默认bridge网络之间的区别

    转载 https://blog.csdn.net/dkfajsldfsdfsd/article/details/79959534

  8. 09 Servlet相关知识点---学习笔记

    1.概念:运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则.将来我们自定义一个类,实现Servlet接口,复写方法. 2.快速入门:(1)创 ...

  9. 什么是REST 、RESTful 、RESTful API?

    介绍 自从Roy Fielding博士在2000年他的博士论文中提出Rest(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重 ...

  10. Java多线程编程之读写锁【ReentrantReadWriteLock】

    有时候我们需要有这样的需求:        对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进行 ...