我目前正在學習Scala,並且在設計我的案例類時遇到了一些問題。我需要兩個具有相同屬性的案例類。所以我認爲從定義這些屬性的抽象基類繼承是一個好主意。但是這個代碼不編譯從抽象類繼承的案例類
abstract class Resource(val uri : String)
case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
因爲uri
的情況下類的構造函數將覆蓋基類的uri
財產。
什麼是設計這個正確的方法是什麼?
我希望能夠做這樣的事
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);
}
}
但是這會在'File'和'Folder'中複製'uri'屬性和getter。有沒有機會獲得乾淨的代碼,看起來像我的問題中的Java示例? –
那麼你爲什麼使用大小寫類?案例類添加getter和setter。編寫普通類和其伴侶對象。 – onof
因爲這會太多鍋爐代碼? ;-)你能舉個例子嗎? –