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

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异常

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,021评论 0 3
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,088评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,262评论 0 2
  • 写着写着发现简书提醒我文章接近字数极限,建议我换一篇写了。 建议52:推荐使用String直接量赋值 一般对象都是...
    我没有三颗心脏阅读 1,372评论 2 4
  • 阿里巴巴 JAVA 开发手册 1 / 32 Java 开发手册 版本号 制定团队 更新日期 备 注 1.0.0 阿...
    糖宝_阅读 7,655评论 0 5