IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    final object?

    hongjiang发表于 2017-03-22 20:02:05
    love 0

    使用final修饰object的场景极少见,需要显式打开-Yoverride-objects编译选项才行:

     ➜  scala -Yoverride-objects
    Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_51).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> class A { object B }
    defined class A
    
    scala> class C extends A  { override object B {}  }
    defined class C

    如果A内部对object B使用final修饰了,子类C就不能覆盖这个object,不过它的意义是什么?这里object B是一个module,要解释object为何被当作module来设计,需要整理一下,等有时间再说。

    PS,我刚发现2.11版本之后repl下,当你定义一个object时,提示已经不同了,在2.11版本之前,repl下会显示 "defined module XXX", 而 2.11 里已经变成了 "defined object XXX",可能隐含着设计者对module(早期scala中module应该是借鉴ML语言的module)这个术语可能存在理解不一致的担心,所以不再使用这个名词(只是我的猜测)。



沪ICP备19023445号-2号
友情链接