我正在学习Scala,但在设计我的案例类时遇到了一些问题。我需要两个具有相同属性的案例类。因此,我认为从定义这些属性的抽象基类继承是一个好主意。然而,这段代码无法编译。
abstract class Resource(val uri : String)
case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
之所以在case类构造函数中使用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示例? - Sven Jacobsunapply()
,因为case f : File =>
匹配对象的类? - Sven Jacobs