2014-09-26 107 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) 
    } 
}