美文网首页
19.Kotlin枚举与委托深入详解

19.Kotlin枚举与委托深入详解

作者: leofight | 来源:发表于2018-05-01 11:31 被阅读0次

枚举

示例代码

package com.leofight.kotlin3

enum class Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

enum class Season2(val temperature: Int) {
    SPRING(10), SUMMER(30), AUTUMN(20), WINTER(-10)
}

//枚举中声明方法
enum class Season3 {
    SPRING {
        override fun getSession(): Season3 = SPRING
    },
    SUMMER {
        override fun getSession(): Season3 = SUMMER
    },
    AUTUMN {
        override fun getSession(): Season3 = AUTUMN
    },
    WINTER {
        override fun getSession(): Season3 = WINTER
    };

    abstract fun getSession(): Season3
}

fun main(args: Array<String>) {
    val seasons = Season.values()
    //seasons.forEach { season: Season -> println(season) }
    seasons.forEach { println(it) }

    println("------------")

    val season = Season.valueOf("SPRING")
    println(season.name)
}

对象声明

示例代码

package com.leofight.kotlin3

import java.awt.event.WindowEvent
import java.awt.event.WindowListener

//对象声明
object MyObject {
    fun method() = "hello world"
}

object MyObject2 : WindowListener {
    override fun windowDeiconified(e: WindowEvent?) {

    }

    override fun windowClosing(e: WindowEvent?) {
    }

    override fun windowClosed(e: WindowEvent?) {
    }

    override fun windowActivated(e: WindowEvent?) {
    }

    override fun windowDeactivated(e: WindowEvent?) {
    }

    override fun windowOpened(e: WindowEvent?) {
    }

    override fun windowIconified(e: WindowEvent?) {
    }

}

fun main(args: Array<String>) {
    println(MyObject.method())
}

关于对象表达式与对象声明之间的区别

1.对象表达式是立刻初始化或者执行的
2.对象声明是延迟初始化的,在首次访问的时候进行
3.伴生对象是在其所对应的类被加载时初始化的,对应于Java的静态初始化

委托(delegation)

示例代码


package com.leofight.kotlin4

interface MyInterface {
    fun myPrint()
}

class MyInterfaceImpl(val str: String) : MyInterface {
    override fun myPrint() {
        println("welcome " + str)
    }

}

class MyClass(myInterface: MyInterface) : MyInterface by myInterface {

}

fun main(args: Array<String>) {
    val myInterfaceImpl = MyInterfaceImpl("zhangsan")
    val myClass = MyClass(myInterfaceImpl)
    myClass.myPrint()
}

委托原理
by关键字后面的对象实际上会被存储在类的内部,编译器则会父接口中的所有方法实现出来,并且将实现转移给委托对象来去进行。

相关文章

  • 19.Kotlin枚举与委托深入详解

    枚举 示例代码 对象声明 示例代码 关于对象表达式与对象声明之间的区别 1.对象表达式是立刻初始化或者执行的2.对...

  • Kotlin-属性委托深入详解

    Kotlin-属性委托深入详解 学习一下属性的委托(delegated property),我们知道定义一个类的属...

  • 委托与事件-委托详解(一)

    前言 说起委托和事件,我就想起了再学校的时候,当时死记硬背去记什么是委托什么是事件。记得当时蝼某人问我,委托是什么...

  • 委托及其用法

    C#委托使用详解(Delegates) 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻。说...

  • JS写事件代理

    js中的事件委托或是事件代理详解

  • 枚举详解

    一.实现原理 上面代码打印结果如下:spring name:SUMMERspring ordinal:1sprin...

  • 设计模式

    单例模式 1)双重检测 2)枚举实现 代理设计模式 代理类和委托类有相同的接口,一个代理类的的对象与一个委托类的对...

  • Java枚举总结

    Java枚举总结 枚举类型比较简单,下面两个文章讲的比较清楚: Java 枚举(enum) 详解7种常见的用法 深...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • iOS 事件以及手势的处理

    iOS 事件以及手势的处理 首先引用深入浅出iOS事件机制,iOS触摸事件处理详解,详解iOS触摸事件与手势识别三...

网友评论

      本文标题:19.Kotlin枚举与委托深入详解

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