如何在编译时获取单例对象的类?

时间:2011-05-24 23:47:02

标签: class scala programming-languages singleton language-design

考虑这样的事情:

object Singleton

val cls: Class[Singleton] = ???

我需要写什么而不是???

我尝试了classOf[Singleton]classOf[Singleton.type]Singleton.type,但没有任何效果。

(我当然知道getClass classOf的运行时版本,但这不是我要问的。)

2 个答案:

答案 0 :(得分:6)

这是一个解决方案,但它并不漂亮......

object Singleton

val cls : Class[Singleton] = Singleton.getClass.asInstanceOf[Class[Singleton]]

编辑:阅读完另一个问题/答案后完成解决方案:Scala equivalent of Java java.lang.Class<T> Object

注1:类型擦除会阻止它特别有用,例如:在模式匹配中。请参阅上面的参考问题/答案,以获得更好的解释

注2:scala -explaintypes标志在理解类型错误方面非常方便。

HTH

答案 1 :(得分:4)

你并不是唯一遇到这个问题的人。答案是:目前无法避免Singleton.getClass。有关classOf[Singleton]无效的详细信息,请参阅this评论