如何以一种很好的方式定义密封的抽象类的成员?

时间:2013-06-22 08:20:57

标签: scala case-class sealed

我想知道是否有更好的方法:

sealed abstract class Edge(val id: String)
case class LabeledEdge(override val id: String, label: String)
    extends Edge(id)
case class WeightedEdge(override val id: String, weight: Double)
    extends Edge(id)

我的问题是,除了id之外,我在这里所代表的成员Edge中有很多成员override val。我必须在抽象类中定义的每个成员之前编写{{1}},这使得它非常麻烦,并且认为应该有一些更好的方法来做到这一点。

提前致谢!

1 个答案:

答案 0 :(得分:4)

您可以将trait与抽象def s(或val s)一起使用,而不使用构造函数:

sealed trait Edge{ def id(): String } // or { val id: String }
case class LabeledEdge(id: String, label: String) extends Edge
case class WeightedEdge(id: String, weight: Double) extends Edge