伴随对象的类

时间:2014-06-28 20:44:29

标签: scala reflection companion-object

我如何获得伴侣对象所代表的类?例如:

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$
}

我的问题是如何获得" true"案例类?我有一个反射的实例,这导致我得到一些奇怪的"私人"尝试在随播对象内使用this.getClass时的构造函数。

3 个答案:

答案 0 :(得分:1)

您可以使用User获取classOf[User]的课程。每个(单身)object都有自己的类。伴随对象User不是类User的实例。

答案 1 :(得分:1)

通常,您无法获得伴随类,因为该伴随类可能存在或可能不存在或已被类加载。除了反射之外,没有其他语言可以做到这一点。

推荐的方法是在伴随对象中声明一个返回类的方法,例如companionClass-这可以通过对象扩展的接口来强制执行。

答案 2 :(得分:0)

讨厌回答我自己的问题,如果有人知道更好的方法,我很乐意将其他人认为是正确的,但这就是我现在想出来的黑客,它似乎让我想去的地方。< / p>

val clazzName = this.getClass.getName
val clazz = Class.forName(clazzName.substring(0, clazzName.length - 1))