2
的地方不要給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的超類型和特徵的方法?顯然,這樣的事情不可能是詳盡無遺的,例如,可能會出現潛在的鴨子類型的組合式爆炸,但似乎很奇怪,不能通過反射來攀登已聲明或內置的繼承層次。
謝謝!