В настоящее время я изучаю Scala, и у меня есть некоторые проблемы при разработке моих тематических классов.Мне нужны два класса case, которые имеют одинаковые свойства.Поэтому я подумал, что было бы неплохо унаследовать от абстрактного базового класса, который определяет эти свойства.Однако этот код не компилируется
abstract class Resource(val uri : String)
case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
, потому что uri
в конструкторах класса case будет перезаписывать свойство uri
базового класса.
Какой будет правильный способ разработкиthis?
Я хочу иметь возможность сделать что-то вроде этого
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")
} }
«Эквивалентный» код Java должен быть примерно таким:
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);
}
}