Scala单例在类型层次结构中的位置

时间:2013-03-10 03:29:38

标签: scala

给定Scala中定义的单例对象...

object Foo;

有一个类型Foo.type,它表示该对象唯一符合的类型。酷!

但我对这种类型还有什么了解。什么?我可以说Foo.type是AnyRef的子类型。酷!

import scala.reflect.runtime.universe.TypeTag
val fooTypeTypeTag = implicitly[TypeTag[Foo.type]]
val anyRefTypeTag = implicitly[TypeTag[AnyRef]]
fooTypeTypeTag.tpe <:< anyRefTypeTag.tpe            // true
fooTypeTypeTag.tpe =:= anyRefTypeTag.tpe            // false

但无论如何要知道Foo.type是否是AnyRef的直接后代?是否有一些常见的类型,所有单例对象(通过“对象XXX”定义的东西)符合?它isn't scala.Singleton,但所有类型Foo.type,Bar.type等应该表达一些共同特征似乎很自然。这样的事情存在吗?

在完成为Foo.type找到TypeTag的工作之后,是否有一些使用Scala反射来探索Foo.type的超类型和特征的方法?显然,这样的事情不可能是详尽无遗的,例如,潜在的鸭子类型会有组合爆炸,但是通过反射攀登声明的或内置的继承层次结构似乎很奇怪。

谢谢!

1 个答案:

答案 0 :(得分:3)

单身人士之间没有共同特征,但他们不一定是AnyRef的直接后代,因为object可以扩展classtrait