PGzxc的博客

纸上得来终觉浅 绝知此事要躬行

0%

Kotlin开发之——密封类

前言

Kotlin的密封类是Java中没有的新概念,并为此开辟了另一片可能性新的世界。
密封类允许你表达约束层次结构,其中对象只能是给定类型之一。也就是说,我们有一个具有特定数量的子类的类。最后,我们得到的结论是非常类似枚举的概念。所不同的是,在枚举中,我们每个类型只有一个对象;而在密封类中,同一个类可以拥有几个对象。

这种差异允许密封类的对象可以保持状态。这给我们带来一些优势,它也为函数性概念敞开了大门。

密封类

密封类的声明

要声明一个密封类,需要将sealed修饰符放在类名之前,密封类可以有子类,但所有的子类声明都必须嵌套在密封类的声明部分之内。

举例

sealed class Operation 
{
    class Add(val value: Int) : Operation()
    class Substract(val value: Int) : Operation()
    class Multiply(val value: Int) : Operation()
    class Divide(val value: Int) : Operation()
}

fun execute(x: Int, op: Operation) = when (op) 
{
    is Operation.Add -> x + op.value
    is Operation.Substract -> x - op.value
    is Operation.Multiply -> x * op.value
    is Operation.Divide -> x / op.value
}

fun main(args:Array<String>)
{
    println("Operation.Add=${execute(2,Operation.Add(3))}")
    println("Operation.Multiply=${execute(3,Operation.Multiply(2))}")
}

输出结果:

Operation.Add=5
Operation.Multiply=6