2011-01-08 22 views
7

Sto definendo una classe di Scala oggi e penso "Ho bisogno di un metodo equals e un metodo hashCode e un metodo copy sarebbe utile anche a questo. La mia classe ha già un sacco di altri codici e non è affatto banale.È appropriato definire una classe di caso Scala non banale?

Quindi, tutto funziona e tutto, ma quando i libri di testo trattano le classi dei casi, tutti gli esempi li definiscono per l'uso come classi di valore o 'oggetti di trasferimento dati'. È appropriato definire una case-class non banale? Il processo di pensiero descritto sopra è OK, o devo pensare alle classi di casi in modo diverso?

+0

In realtà, la risposta di Daniel Sobral è più dettagliata e probabilmente dovresti accettarla invece della mia. –

+0

Lo farò, Alexey. Grazie. – David

risposta

9

A case class prevede, equals, hashCode e toString metodi basati sui principali parametri del costruttore, tutti che si trasformano in val troppo. Inoltre, l'oggetto companion ottiene un apply e un metodo unapply, sempre in base ai parametri del costruttore principale.

Inoltre, un Serializable eredita da Serializable e da Product e non deve essere esteso da altre classi.

Se tutte queste cose sono appropriate per la classe, sentiti libero di dichiararlo come "caso class".

+0

Puoi spiegare perché le classi case non dovrebbero essere estese? – Jus12

+0

@ Daniel: non importa. Ho trovato la risposta a http://scala-programming-language.1934581.n4.nabble.com/scala-Do-you-use-case-class-inheritance-td2001640.html – Jus12

6

Sentiti libero, purché non abbia discendenti. Estendere le classi di casi è una cattiva idea.

+3

Ed è deprecato. scala> case class Bar (override val x: String) estende Foo ("Some string") : 7: warning: case class 'class Bar 'ha case class antenato' class Foo'. Questo è stato deprecato per complicare indebitamente sia l'utilizzo che l'implementazione. Dovresti invece usare gli estrattori per la corrispondenza dei modelli sui nodi non foglia. case class Bar (override val x: String) estende Foo ("Some string") – Janx

Problemi correlati