给定一个在 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”定义的事物)都符合的通用类型?它不是 scala.Singleton,但似乎很自然,所有类型 Foo.type、Bar.type 等都应该表达一些共同的特征。这样的事情存在吗?
在完成为 Foo.type 找到 TypeTag 的工作之后,是否有一些方法可以利用 Scala 反射来探索 Foo.type 的超类型和特征?显然这样的事情不可能详尽无遗,例如潜在的鸭子类型的组合爆炸,但不能通过反射爬上已声明或内置的继承层次结构似乎仍然很奇怪。
谢谢!