Lớp liệt kê — Enum classes
Những trường hợp căn bản dùng lớp liệt kê là để hiện thực kiểu dữ liệu an toàn liệt kê.
enum class Ocean {
ARCTIC, ATLANTIC, INDIAN, PACIFIC, SOUTHERN
}
Mỗi hằng số liệt kê là một object
. Các hằng số liệt kê là cách nhau bởi dấu phẩy. Khi đó mỗi hằng số liệt kê là một ví dụ của lớp liệt kê. Nó cũng có thể khởi tạo như sau.
enum class Level(val mark: Float) {
VERY_GOOD(8.0f),
GOOD(7.0f),
AVERAGE(5.0f),
FAIL(3.5f)
}
Lớp vô danh — Anonymous classes
Các hằng số liệt kê có thể được khai báo lớp nó sở hữu và có những hàm của, và nó cũng có thể hiện thực lại các hàm nền.
enum class ToggleState {
ON {
override fun toggle(): ToggleState {
return OFF
}
},
OFF {
override fun toggle(): ToggleState {
return ON
}
};
abstract fun toggle(): ToggleState
}
Nếu lớp liệt kê có các hàm hoặc thuộc tính thì dùng dấu chấm phẩy để ngăn cách giữ hằng liệt kê.
Hiện thực interfaces trong lớp liệt kê
Một lớp liệt kê có thể hiện thực một interface (nhưng nó không thể kế thừa một lớp), có thể hiện thực các hàm và cung cấp cho các lớp vô danh hoặc tách biệt sự hiện thực ở lớp vô danh. Như ví dụ dưới đây:
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)
}
Thao tác với các hằng số liệt kê
Lớp liệt kê Kotlin có các phương thức tổng hợp để định nghĩa hằng số liệt kê và lấy hằng số liệt kê theo tên. Các hàm đó như sau:
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
valueOf()
sẽ trả về lỗi IllegalArgumentException
nếu tên đưa vào không trùng với hằng số liệt kê trong lớp liệt kê.
Chúng ta có thể truy các hằng số của lớp liệt kê theo hàm trừu tượng enumvalues<T>()
và enumValueOf<T>()
inline fun <reified T : Enum<T>> printAllValues() { print(enumValues<T>().joinToString { it.name }) }
Hằng số liệt kê có thuộc tính tên và vị trí của nó trong khai báo lớp liệt kê.
val name: String
val ordinal: Int
Hằng số liệt kê mặc định là hiện thực Comparable interface và thứ tự tự nhiên là thứ tự mà chúng được định nghĩa trong lớp liệt kê.
Cảm ơn các bạn đã đọc bài. Đăng ký kênh chúng tôi để xem những bài học mới nhất.
Youtube kênh: https://bit.ly/2EFOOXs
Thảo luận bằng cách comment ở đây hoặc trong video của blog này.