70

途中で常に新しい値を取得せずにケース クラスを拡張する方法はありますか?

たとえば、これは機能しません:

case class Edge(a: Strl, b: Strl)
case class EdgeQA(a: Strl, b: Strl, right: Int, asked: Int) extends Edge(a, b)

"a" conflicts with "a"、だから私はに名前を変更することを余儀なくされていa1ます。しかし、「a」のすべての種類の余分なパブリック コピーは必要ないので、非公開にしました。

case class Edge(a: Strl, b: Strl)
case class EdgeQA(private val a1: Strl, private val b1: Strl, right: Int, asked: Int) extends Edge(a, b)

これは私にはきれいに思えません...何か足りないのですか?

4

4 に答える 4

73

前のコメンターが述べたように、ケース クラスの拡張は避けるべきですが、Edge クラスをトレイトに変換できます。

プライベートステートメントを避けたい場合は、変数をオーバーライドとしてマークすることもできます

trait Edge{
  def a:Strl
  def b:Strl
}

case class EdgeQA(override val a:Strl, override val b:Strl, right:Int, asked:Int ) extends Edge

特性で優先defすることを忘れないでくださいval

于 2012-06-23T17:18:57.643 に答える
14

サブクラス化によってケース クラスを拡張することはできません。むしろ、ケース クラスのサブクラスは、ケース クラス自体になることはできません。

于 2012-06-22T23:40:09.953 に答える