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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |