2014-09-26 64 views
0

我有兩個燙傷作業,其中一個從另一個繼承。這樣在子類中燙傷覆蓋參數

class BaseJob(args : Args) extends Job(args) { 
    val verbose = args.boolean("verbose") 

    if(verbose){ 
    // do stuff 
    }else{ 
    // do other stuff 
    } 
} 

class MyJob(args : Args) extends BaseJob(args) { 
    override val verbose = true 

    override def formatOutput(p: Pipe): Pipe = { 
    println(verbose) // outputs false if not run with --verbose 
    p.project('field1, 'field2, 'field3) 
    } 
} 

的想法的東西是,在MyJob一些代碼假設我們使用冗餘標誌運行,因此,而不是使之成爲一個參數,我希望確保它始終設置。然而,簡單地覆蓋類變量不起作用,因爲它仍然會從命令行參數取'verbose'的值。有誰知道如何做到這一點?

回答

1

它可以通過額外的'擴展'來完成。這樣繼承可以按預期工作。

class MyJob(args : Args) extends { override val verbose = true } with BaseJob(args) { 

    override def formatOutput(p: Pipe): Pipe = { 
    println(verbose) // outputs false if not run with --verbose 
    p.project('field1, 'field2, 'field3) 
    } 
}