如何获得同伴对象所代表的类?例如:
val user = User("something")
val userClazz = user.getClass //returns somepackage.User
现在如果我有一个伴用户对象:
object User {
def myClass = this.getClass //seems to return a different type of class somepackage.User$
}
我的问题是我如何得到"真实"的情况类类?我有一个反射的实例,这导致我在尝试使用它时得到一些奇怪的"私有"构造函数。
可以用classOf[User]
得到User
类。每个(单例)object
都有自己的类。伴随对象User
不是类User
的实例。
一般来说,您无法获得伴侣类,因为伴侣类可能存在,也可能不存在,或者已经被类加载。除了反射,在语言中没有其他方法可以做到这一点。
推荐的方法是在返回类的同伴对象中声明一个方法,例如companionClass
-这可以通过对象正在扩展的接口强制执行。
讨厌回答我自己的问题,如果有人知道更好的方法,我很乐意标记别人的正确方法,但这是我现在想出的hack,它似乎能让我去我想去的地方。
val clazzName = this.getClass.getName
val clazz = Class.forName(clazzName.substring(0, clazzName.length - 1))