当我只有这个类时,Scala是否可以获取对象的单例实例?考虑
object A {}
def getSingletonInstance[T](x: Class[T]): Option[T] = {
// output the singleton, if x is a singleton class i.e. defined by an object
// is this possible?
}
getSingletonInstance(A.getClass) // --> should return Some[A]
答案 0 :(得分:2)
关于SO的讨论有很多不同的方法。 其中一个我在对你的问题的评论中提及。 这是另一个,使用"官方"斯卡拉反射:Get companion object instance with new Scala reflection API
如果你不介意一种方法,包括一点点"黑客攻击" (如使用一些非官方/未记录/重合的功能而不是官方API),你可以通过这样的方式更容易地做到这一点:
val clazz = Class.forName(x.getName + "$")
val singleton = clazz.getField("MODULE$").get(clazz)
请注意,类T
的伴随对象不必是T
的实例,因此getSingletonInstance
的声明始终有效。
编辑我没有意识到您将对象本身的类传递给您的函数,而不是伴侣类。在这种情况下,您不需要在上面的代码中附加美元符号,甚至根本不需要第一行。你可以x.getField("MODULE$").get(x)