Scala设计模式的java.lang.NoSuchMethodException

时间:2016-09-16 01:21:09

标签: scala design-patterns apache-spark cassandra spark-cassandra-connector

这是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在另一个包中创建,然后传递给这些类,

0 个答案:

没有答案