如何在Scala案例类中将“ [T]的子代”指定为类型

use*_*820 0 inheritance scala

假设我有一个Report班级和两个孩子班级

class Report {
}

class SubReport extends Report {
}

class SubReport2 extends Report {
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个case类,其中reportType我要在其中一个属性()中指定一种SubReport类型

class Report {
}

class SubReport extends Report {
}

class SubReport2 extends Report {
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有关键字或构造可ChildOf(Report)在case类中指定类似类型的内容,并且类型检查可以接受任何子类。

我曾尝试实例化下面的case类,但是失败了。

case class SubReportClient(
    reportType: Report //Using parent class
)
Run Code Online (Sandbox Code Playgroud)

Dim*_*ima 5

case class SubReportClient(reportType: Report)是正确的,它将接受的所有子类Report,仅此而已。那不是你想要的吗?

如果要访问类中的实际类型,可以使其通用:

 case class SubReportClient[T <: Report)(reportType: T)
Run Code Online (Sandbox Code Playgroud)

不过这样一来SubReportClient(new SubReport)SubReportClient(new SubReport2)是两个实例不同的类。