English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin基础教程

Kotlin流程控制

الوظائف في Kotlin

الخطوط في Kotlin

Kotlin面向对象(OOP)

التصنيفات المعددة (Enum) في Kotlin

استخدام المصنف الأساسي هو تحقيق مصنف آمن من النوع.

قيم المحددة تفصل بالكومات، كل قيمة محددة هي كائن.

مصنفُ class Color{
    أحمر،أسود،أزرق،أخضر،أبيض
{}

البدء في القيمة المحددة

كل قيمة محددة هي مثال على مصنف الكائن، يمكنها أن تكون مُبادرة:

مصنفُ class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
{}

الاسم الافتراضي هو اسم القيمة المحددة، والقيمة تبدأ من 0. إذا كنت بحاجة إلى تحديد قيمة، يمكنك استخدام بناءه المحدد:

مصنفُ class Shape(value: Int){
    ovel(100),
    rectangle(200)
{}

يدعم المصنف أيضًا تعريف كائنات مجهولة المصدر الخاصة بهم، والطرق المحددة، وفقًا للأسلوب الأساسي. مثل:

مصنفُ class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },
    TALKING {
        override fun signal() = WAITING
    };
    abstract fun signal(): ProtocolState
{}

إذا كان مصنف الكائن يحتوي على أي أعضاء، يجب استخدام نقاط السطر لتجزئة تعريف القيم المحددة في تعريف الأعضاء

استخدام القيم المحددة

في Kotlin، مصنفات الكائنات تحتوي على طرق مدمجة تسمح بالتخطي عبر القيم المحددة المحددة، والحصول على القيمة المحددة من خلال الاسم.

EnumClass.valueOf(value: String): EnumClass // تحويل الاسم المحدد إلى قيمة مصنف، إذا لم يتم التطابق، سيتم إطلاق IllegalArgumentException
EnumClass.values(): Array<EnumClass> // يعود بشكل مصفوفة، القيم المحددة

الحصول على معلومات حول القيمة المحددة:

مغيرُ name: String // للحصول على اسم القيمة
مغيرُ ordinal: Int // للحصول على ترتيب القيمة المحددة في جميع القيم المحددة في المصنف

مثال على الاستخدام

مصنفُ class Color{
    أحمر،أسود،أزرق،أخضر،أبيض
{}
fun main(args: Array<String>) {
    مغيرُ color: Color = Color.BLUE
    println(Color.values())
    println(Color.valueOf("RED"))
    println(color.name)
    println(color.ordinal)
{}

بداية من 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 })
{}
fun main(args: Array<String>) {
    printAllValues<RGB>() // إخراج RED, GREEN, BLUE
{}