Tôi hiện đang học Scala và tôi có một số vấn đề về thiết kế các lớp chữ hoa của mình. Tôi cần hai lớp vỏ có cùng thuộc tính. Vì vậy, tôi nghĩ rằng tôi sẽ là một ý tưởng tốt để kế thừa từ một lớp cơ sở trừu tượng định nghĩa các thuộc tính này. Tuy nhiên mã này không biên dịchCác lớp học kế thừa từ lớp trừu tượng
abstract class Resource(val uri : String)
case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
vì uri
trong các nhà thầu trường hợp lớp sẽ ghi đè lên uri
tài sản của lớp cơ sở.
Cách chính xác để thiết kế điều này là gì?
Tôi muốn để có thể làm điều gì đó như thế này
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")
} }
Mã "tương đương" Java nên có cái gì đó như
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);
}
}
Tuy nhiên điều này trùng lặp thuộc tính 'uri' và getter trong cả hai' File' và 'Folder'. Có cơ hội để có được mã sạch sẽ trông giống như ví dụ Java trong câu hỏi của tôi? –
Sau đó, tại sao bạn sử dụng các lớp chữ thường? Trường hợp các lớp học thêm getter và setters. Viết các lớp bình thường và các đối tượng đồng hành của chúng. – onof
Bởi vì điều này sẽ là quá nhiều mã tấm nồi hơi? ;-) Bạn có thể vui lòng cung cấp một ví dụ không? Đã cập nhật –