Actualmente estoy aprendiendo sobre Scala y tengo algunos problemas para diseñar mis clases de casos. Necesito dos clases de casos que tengan las mismas propiedades. Así que pensé que sería una buena idea heredar de una clase base abstracta que define estas propiedades. Sin embargo, este código no compilaClases de casos que heredan de la clase abstracta
abstract class Resource(val uri : String)
case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
porque uri
en los constructores de clase caso puede sobrescribir la propiedad uri
de la clase base.
¿Cuál sería la forma correcta de diseñar esto?
Quiero ser capaz de hacer algo como esto
val arr = Array[Resource](File("test"), Folder("test2"))
arr.foreach { r : Resource => r match {
case f : File => println("It's a file")
case f : Folder => println("It's a folder")
} }
El código Java "equivalente" debe ser algo como
abstract class Resource {
private String uri;
public Resource(String uri) {
this.uri = uri
}
public String getUri() {
return uri;
}
}
// same for Folder
class File extends Resource {
public File(String uri) {
super(uri);
}
}
Sin embargo, esto duplica la propiedad 'uri' y getter en' File' y 'Folder'. ¿Hay alguna posibilidad de obtener un código limpio que se parece al ejemplo de Java en mi pregunta? –
¿Entonces por qué usa clases de casos? Las clases de casos agregan getter y setters. Escribe clases normales y sus objetos acompañantes. – onof
Porque esto sería demasiado código de la placa de la caldera? ;-) ¿Puedes dar un ejemplo? –