Kotlin álgebra/enums/classes seladas

Tipos de dados algébricos

Ele pode ser usado para identificar um conjunto fechado de tipos, e os tipos de enumeração são um simples ADT

enum class LicenseStatus {
    UNQUALIFIED, LEARNING, QUALIFIED;
}

class Driver(var status: LicenseStatus) {
    fun checkLicense(): String {
        return when (status) {
            LicenseStatus.UNQUALIFIED -> "没资格"
            LicenseStatus.LEARNING -> "在学"
            LicenseStatus.QUALIFIED -> "有资格"
        }

    }
}

fun main(){
    println(Driver(LicenseStatus.QUALIFIED).checkLicense())
}

Selado

Para ADTs mais complexos, você pode usar as classes seladas do Kotlin (classes seladas) para implementar definições mais complexas.As classes seladas podem ser usadas para definir um ADT semelhante a uma classe de enumeração, mas você pode controlar um subtipo com mais flexibilidade.

Uma classe selada pode ter várias subclasses. Não há necessidade de uma vírgula no meio. Para conseguir uma classe selada, essas subclasses devem ser definidas no mesmo arquivo que ele

sealed class LicenseStatus2 {
    //每次没有要变化的量 所以用单例可以
    object UnQualified : LicenseStatus2()

    object Learning : LicenseStatus2()

    //驾驶证id会变化。所以使用类合适
    class Qualified(val licenseId: String) : LicenseStatus2()
}

class Driver2(var status: LicenseStatus2) {
    fun checkLicense(): String {
        return when (status) {
            is LicenseStatus2.UnQualified -> "没资格"
            is LicenseStatus2.Learning -> "在学"
            is LicenseStatus2.Qualified -> "有资格,驾驶证编号 ${(this.status as LicenseStatus2.Qualified).licenseId}"
        }

    }
}

fun main() {
    val status = LicenseStatus2.Qualified("1234");
    val driver = Driver2(status)
    println(driver.checkLicense())
}

 

Acho que você gosta

Origin blog.csdn.net/mp624183768/article/details/123896862
Recomendado
Clasificación