gpt4 book ai didi

class - 从抽象类继承的案例类

转载 作者:行者123 更新时间:2023-12-03 13:52:50 25 4
gpt4 key购买 nike

我目前正在学习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);
}
}

最佳答案

正确的语法应为:

abstract class Resource {
val uri: String
}

case class File(uri : String) extends Resource
case class Folder(uri : String) extends Resource


Stream[Resource](File("test"), Folder("test2")) foreach {
r : Resource => r match {
case f : File => println("It's a file")
case f : Folder => println("It's a folder")
} }




编辑

没有案例类:

abstract class Resource(val uri : String)

class File(uri : String) extends Resource(uri) {
override def toString = "..."
}
object File {
def apply(uri: String) = new File(uri)
}

class Folder(uri : String) extends Resource(uri) {
override def toString = "..."
}
object Folder {
def apply(uri: String) = new Folder(uri)
}

关于class - 从抽象类继承的案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com