当我定义a值时,我用Scala编写了这段代码,我还调用了对象中的一些方法,比如setStr,它非常有用,令人惊叹。但是当我将我的AClass定义为final时,编译器会抛出一个异常,因为非法继承了final类。在某些情况下,我应该使用final类,在类初始化之后调用这种类型的方法对我来说非常有用,我的问题是如何解决这个问题
test("Test function call") {
val a: AClass = new AClass {
setStr("Pooya")
func1(this)
}
}
class AClass { // when I declare the class final, the compiler will raise an error
private var str:String=""
def setStr(str:String)={
this.str=str
}
def aMethod() = print(str)
}
def func1(a: AClass) {
a.aMethod()
}发布于 2013-07-21 22:30:42
当你使用new AClass { ... }时,你正在创建一个扩展这个类的匿名类。当一个类是final时,它不能被扩展。
一种做你想做的事情的方法是这样的:
val a: AClass = new AClass
import a._
setStr("Pooya")
func1(this)遵循@Vladimir的建议,以一种稍微干净的方式:
val a: AClass = { val a = new AClass
import a._
setStr("Pooya")
func1(this)
a
}现在,您可以多次重复该操作,而不会使setStr模棱两可。对于具有当前定义的func1来说,它是否在{}块中应该无关紧要。
https://stackoverflow.com/questions/17773189
复制相似问题