特殊意味着它们为您提供了无法获得的功能,因此它们以特殊方式由编译器处理。 示例:'DelayedInit' - 将所有init代码转换为main方法,'Dynamic' - 代理所有方法等
答案 0 :(得分:12)
目前,我所知道的唯一特殊特征是DelayedInit
和Dynamic
。
继承自这些特征的任何内容也会得到编译器的特殊处理,就像App
一样,它是DelayedInit
的子类。
值得注意的是,任何特征都可能被某些库,框架或编译器插件用作标记,以“为您提供无法获得的功能”。这两个是默认编译器特别识别的唯一特征。
除了标记特征之外,还有一些注释可以得到特殊处理,scala.annotation
和scala.reflect
是查找这些注释的好地方,@specialized
注释中也有scala
注释1}}包和几个在编译器插件中(例如分隔的延续)。
答案 1 :(得分:10)
还有scala.Singleton
。
这是final trait
,在编写代码时无法正常使用,但是使用像object Foo
这样的单例的每个人都已间接使用它。
Singleton
来扩展单例,因此:
scala> object Foo
defined module Foo
scala> Foo.isInstanceOf[Singleton]
res0: Boolean = true