给定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的超类型和特征的方法?显然,这样的事情不可能是详尽无遗的,例如,潜在的鸭子类型会有组合爆炸,但是通过反射攀登声明的或内置的继承层次结构似乎很奇怪。
谢谢!
答案 0 :(得分:3)
单身人士之间没有共同特征,但他们不一定是AnyRef
的直接后代,因为object
可以扩展class
或trait
。