首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin系列之密封类

今天说说Kotlin中的密封类。

在Java中没有这个概念,所以就没法和Java进行对比了,主要看看Kotlin中的密封类的出现目的和使用方法。

为什么会出现密封类

我们先不说是什么,先看看为什么需要密封类。下面先通过一段代码来看。

Kotlin代码

上面的代码中定义了一个接口,然后两个类实现这个接口。我们在方法中通过传入接口对象,使用来判断传入的对象是哪种类型。关于的使用,可以查看以前的文章有专门介绍。这里使用时,必须要添加一个,否则会报错,无法编译通过。

但是上面的代码存在一个潜在的问题。假如我们这时候再添加一个子类,这时候并没有发现我们的子类增加了,也不会报错,可能我们需要给增加一个新的分支,但是由于没有报错,可能就会被我们忽略了。

基于上面的原因,Kotlin为了解决上面的潜在问题,便提出了。

密封类的使用

需要使用关键字修饰,并且被关键字修饰的类,它的子类必须要以的形式在父类中全部声明,关于的想关内容可以查看上一节的文章。下面写一个的例子。

如果你看过前面的内容,你就会有疑问,Kotlin中的类不是默认的吗?为什么可以被继承呢?

这是因为被修饰的类默认是的,所以可以被继承,而不需要显式使用修饰符。

那我看看密封类的出现,会怎么解决我们上面提出的问题呢?看下面的代码

Kotlin代码

你会发现结构中少了。对因为在密封类中已经列出了所有的密封类的所有子类,所以就不会有的情况。

这样之后,你每次增加一个子类,结构就会检查到你增加了子类,就必须要给结构添加一个分支,否则就会编译报错,这样就把潜在的问题消灭在了编译阶段。

就像下面这样,增加一个子类必须增加相应的。

Kotlin代码

写在最后

Kotlin中的密封类的出现,在于它定义了一种受限的类继承结构,可以保证我们写出更安全的代码。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0ILAW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券