Soy bastante nuevo en Scala, y estoy escribiendo una biblioteca API y tratando de usar solo vals y objetos inmutables (cuando sea posible). Estoy tratando de decidir la forma correcta de modelar los objetos. Supongamos que hay varios objetos "Post", que comparten algunos campos comunes, y cada uno añade sus propios campos específicos:Scala Extendiendo Clase abstracta paramétrica
abstract class Post(val id: Int, val name: String, ...)
case class TextPost(val id: Int, val name: String, ..., val text: String) extends Post(id, name, ...)
case class PhotoPost(val id: Int, val name: String, ..., val url: String) extends Post(id, name, ...)
Este método agrega una gran cantidad de declaraciones repetitivas y el código de la caldera de la placa, sobre todo cuando se trata de muchas Las subclases de publicaciones y campos compartidos se declaran en la clase abstracta. La forma en que lo veo, esto es causado por el uso de vals que solo puede ser inicializado por el constructor. ¿Hay una mejor manera de crear las relaciones detalladas aquí, o debo sufrir esto por querer usar solo objetos inmutables?
¡Gracias por la respuesta! En términos de código de placa de caldera, este método básicamente me ahorra declarar cada parámetro en clases derivadas como un valor, pero aún debo repetir todos los parámetros en cada declaración, ¿verdad? Estoy enfatizando esto, porque tengo 8 subclases y 15 campos compartidos, y esto parece ser un gran caso SECO. Pero entiendo por su respuesta que no hay forma de evitar esto, ¿verdad? – orrsella
La única otra alternativa es _no_ implementar la interfaz común ('Publicación'). Eso significa que debe _componer_ el tipo para contenerlo, pero no sé si eso es lo que quiere: 'mensaje de la clase de caso (id: Int, nombre: Cadena); clase de caso TextPost (publicación: Publicación, texto: Cadena) '. –
No creo que esta respuesta sea suficiente ya que no responde la pregunta de la placa de la caldera ... –