首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决Scala中从最终类非法继承的问题

如何解决Scala中从最终类非法继承的问题
EN

Stack Overflow用户
提问于 2013-07-21 22:07:37
回答 2查看 3.4K关注 0票数 2

当我定义a值时,我用Scala编写了这段代码,我还调用了对象中的一些方法,比如setStr,它非常有用,令人惊叹。但是当我将我的AClass定义为final时,编译器会抛出一个异常,因为非法继承了final类。在某些情况下,我应该使用final类,在类初始化之后调用这种类型的方法对我来说非常有用,我的问题是如何解决这个问题

代码语言:javascript
运行
复制
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()
}
EN

Stack Overflow用户

回答已采纳

发布于 2013-07-21 22:30:42

当你使用new AClass { ... }时,你正在创建一个扩展这个类的匿名类。当一个类是final时,它不能被扩展。

一种做你想做的事情的方法是这样的:

代码语言:javascript
运行
复制
val a: AClass = new AClass 
import a._
setStr("Pooya")
func1(this)

遵循@Vladimir的建议,以一种稍微干净的方式:

代码语言:javascript
运行
复制
val a: AClass = { val a = new AClass 
  import a._
  setStr("Pooya")
  func1(this) 
  a 
}

现在,您可以多次重复该操作,而不会使setStr模棱两可。对于具有当前定义的func1来说,它是否在{}块中应该无关紧要。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17773189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档