美文网首页Kotlin编程
Kotlin 笔记 内部类,枚举,异常

Kotlin 笔记 内部类,枚举,异常

作者: yangweigbh | 来源:发表于2017-01-15 10:10 被阅读207次

    1.内部类

    静态内部类

    class Outer {
        private val bar: Int = 1
        class Nested {
            fun foo() = 2
        }
    }
    
    val demo = Outer.Nested().foo() // == 2
    

    内部类,可以访问外部类的成员,用qualified this来指代不同的类

    class Outer {
        private val bar: Int = 1
        inner class Inner {
            fun foo() = bar
        }
    }
    
    val demo = Outer().Inner().foo() // == 1
    

    匿名内部类

    通过object expression来定义匿名内部类

    window.addMouseListener(object: MouseAdapter() {
        override fun mouseClicked(e: MouseEvent) {
            // ...
        }
                                                                                                                
        override fun mouseEntered(e: MouseEvent) {
            // ...
        }
    })
    

    如果对象是java函数接口(只有一个抽象方法的接口),那么可以在接口名后加lambda表达式

    val listener = ActionListener { println("clicked") }
    

    枚举

    定义枚举,每个枚举常量都是一个object

    enum class Direction {
        NORTH, SOUTH, WEST, EAST
    }
    

    枚举可以定义属性

    enum class Color(val rgb: Int) {
            RED(0xFF0000),
            GREEN(0x00FF00),
            BLUE(0x0000FF)
    }
    

    定义方法

    enum class ProtocolState {
        WAITING {
            override fun signal() = TALKING
        },
    
        TALKING {
            override fun signal() = WAITING
        };
    
        abstract fun signal(): ProtocolState
    }
    

    枚举常量预定义的属性

    val name: String //名字
    val ordinal: Int //定义的位置
    

    通过valueOf来得到某个枚举常量,通过values来得到枚举常量的数组

    EnumClass.valueOf(value: String): EnumClass
    EnumClass.values(): Array<EnumClass>
    

    Enum还实现了Comparable接口,按照定义的顺序排序

    异常

    扔出异常

    throw MyException("Hi There!")
    

    catch 异常

    try {
        // some code
    }
    catch (e: SomeException) {
        // handler
    }
    finally {
        // optional finally block
    }
    

    try..catch 有返回值

    val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
    

    Kotlin没有checked exception,当调用声明了checked exception的java方法时,不要求catch异常

    相关文章

      网友评论

        本文标题:Kotlin 笔记 内部类,枚举,异常

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