加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用密封特征和密封抽象类作为基类之间的区别

发布时间:2020-12-16 08:56:19 所属栏目:安全 来源:网络整理
导读:在尝试学习Akka的过程中,我经常会找到类似于以下类层次结构的示例: sealed trait Messagecase class TextMessage(user: String,text: String) extends Messagecase class StatusMessage(status: String) extends Message 但是,即在Scala docs中有以下示例:
在尝试学习Akka的过程中,我经常会找到类似于以下类层次结构的示例:

sealed trait Message

case class TextMessage(user: String,text: String) extends Message
case class StatusMessage(status: String) extends Message

但是,即在Scala docs中有以下示例:

abstract class Notification

case class Email(sourceEmail: String,title: String,body: String) extends Notification
case class SMS(sourceNumber: String,message: String) extends Notification
case class VoiceRecording(contactName: String,link: String) extends Notification

使用密封特征与抽象类(或本例中的密封抽象类)作为没有类层次结构的构造函数参数的基类有什么区别?使用一个优于另一个有一些优势吗?

编辑:

具体来说,如果两者,特征和抽象类都被密封,我不能将它们扩展到文件之外,对吧?在那种情况下,我无法用Java继承它们吗?如果是这样的话,密封性将使得在the suggested duplicate中找到的大多数参数变得无用,因为它们引用了文件外的继承.

解决方法

在这种特殊情况下,除了您不能扩展多个抽象类但可以扩展多个特征之外没有任何差异.

您应该检查其他答案(如评论中所述),以查看抽象类和特征之间的实际差异.如果您只是使用抽象类或特征来定义类型层次结构,就像在这种情况下那样,则没有区别.

例如.你可以做到以下几点:

trait A
trait B

case class C(a: Int) extends A with B

但你做不到:

abstract class A
abstract class B

case class C(a: Int) extends A with B

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读