这是Scala Design Patterns面临的一个奇怪问题。
这是我的示例代码
trait ReportFactory
object ReportFactory {
def apply(reportType : String) = reportType match {
case "RepA" => new ClassRepA(repDF)
case "RepB" => new ClassRepA(repDF)
}
}
将其称为
def executeReports(reportType : String) = reportType match {
case "RepA" => ReportFactory("RepA")
case "RepB" => ReportFactory("RepB")
}
班级定义
ClassRepA(reportName : String) extends Serializable with ReportFactory {
//use Dataframe for processing Reports A
}
ClassRepB(reportName : String) extends Serializable with ReportFactory {
//use Dataframe for processing Report B
}
问题:
当RepB执行时,我得到了
java.lang.InstantiationException:com.xxx.ClassRepB
我也看到了
引起:java.lang.NoSuchMethodException: ccom.xxx.ClassRepB。()at java.lang.Class.getConstructor0(Unknown Source)... 40多个
我在这做什么? 我生成一个DataFrame ..缓存它..然后根据每个报告的业务逻辑将相同的DataFrame传递给后续报告。
我已经尝试了def this() {this()}
之类的解决方案日志,但似乎没有任何工作
我不知道为什么会出现这个错误。如果有人有想法/建议,请告诉我,我会试一试。
修改
我的坏......
这是编辑过的片段..
trait ReportFactory
object ReportFactory {
def apply(repDF: Dataframe, reportType : String) = reportType match {
case "RepA" => new ClassRepA(repDF)
case "RepB" => new ClassRepA(repDF)
}
}
repDF在另一个包中创建,然后传递给这些类,