kotlin類與對象——>嵌套類與內部類、枚舉類
1.嵌套類,類可以嵌套在其他類中:
class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2
2.內部類,標記為inner的嵌套類能夠訪問其外部類的成員。內部類會帶有一個對外部類的對象的引用
class Outer { private val bar: Int = 1 inner class Inner { fun foo() = bar } } val demo = Outer().Inner().foo() // == 1 //參?限定的 this 表達式以了解內部類中的 this 的消歧義用法。
3.匿名內部類,使用對象表達式創建匿名內部類實例
window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { ...... } override fun mouseEntered(e: MouseEvent) { ...... } })
3.1 注:對于 JVM 平臺, 如果對象是函數式 Java 接口(即具有單個抽象方法的 Java 接口)的實例,你可以使 用帶接口類型前綴的lambda表達式創建它:
val listener = ActionListener { println("clicked") }
4.枚舉類,枚舉類的最基本的用法是實現類型安全的枚舉:
enum class Direction { NORTH, SOUTH, WEST, EAST } //每個枚舉常量都是一個對象。枚舉常量用逗號分隔。
5.初始化,因為每一個枚舉都是枚舉類的實例,所以他們可以是這樣初始化過的
enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) }
6.匿名類,枚舉常量還可以聲明其帶有相應方法以及覆蓋了基類方法的匿名類
enum class ProtocolState { WAITING { override fun signal() = TALKING }, TALKING { override fun signal() = WAITING }; abstract fun signal(): ProtocolState }
如果枚舉類定義任何成員,那么使用分號將成員定義中的枚舉常量定義分隔開。枚舉條目不能包含內部類以外的嵌套類型(已在 Kotlin 1.2 中棄用)。
7.在枚舉類中實現接口
一個枚舉類可以實現接口(但不能從類繼承),可以為所有條目提供統一的接口成員實現,也可以在相應 匿名類中為每個條目提供各自的實現。只需將接口添加到枚舉類聲明中即可,如下所示:
enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator { PLUS { override fun apply(t: Int, u: Int): Int = t + u }, TIMES { override fun apply(t: Int, u: Int): Int = t * u }; override fun applyAsInt(t: Int, u: Int) = apply(t, u) }
8.使用枚舉常量
Kotlin 中的枚舉類也有合成方法允許列出定義的枚舉常量以及通過名稱獲取枚舉常量。這些方法的簽 名如下(假設枚舉類的名稱是 EnumClass):
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
如果指定的名稱與類中定義的任何枚舉常量均不匹配,valueOf() 方法將拋出 IllegalArgumentException 異常。
自 Kotlin 1.1 起,可以使用 enumValues<T>() 與 enumValueOf<T>() 函數以泛型的方式訪問枚 舉類中的常量 :
enum class RGB { RED, GREEN, BLUE } inline fun <reified T : Enum<T>> printAllValues() { print(enumValues<T>().joinToString { it.name }) } printAllValues<RGB>() // 輸出 RED, GREEN, BLUE
每個枚舉常量都具有在枚舉類聲明中獲取其名稱與位置的屬性:
val name: String
val ordinal: Int
枚舉常量還實現了 Comparable 接口,其中自然順序是它們在枚舉類中定義的順序

浙公網安備 33010602011771號