zoukankan      html  css  js  c++  java
  • Kotlin枚举与委托深入详解

    枚举:

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

    还可以接收参数,如下:

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

    看下错误提示:

    所以可以这样:

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

    下面来使用一下:

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

    对象声明:

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

    而对象声明是这样的:

    咱们使用一下:

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

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

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

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

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

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

    委托[delegation]:

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

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

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

  • 相关阅读:
    acm 总结之大数加法
    hdu 1004
    hdu 1887
    hdu 2007
    hdu 2004
    ACM总结之 A+B problem 总结
    nyoj_42_一笔画问题_201403181935
    最短路径--Floyd算法
    最短路径—Dijkstra算法
    nyoj_114_某种序列_201403161700
  • 原文地址:https://www.cnblogs.com/webor2006/p/11369019.html
Copyright © 2011-2022 走看看