1

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

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

我的问题是如何获得“真实”案例类课程?我有一个反射实例,这导致我在尝试在伴随对象中使用 this.getClass 时得到一些奇怪的“私有”构造函数。

4

3 回答 3

1

你可以得到Userwith的类classOf[User]。每个(单例)object都有自己的类。Companion 对象User不是 class 的实例User

于 2014-06-28T21:09:33.553 回答
1

通常,您无法获取伴生类,因为伴生类可能存在也可能不存在或被类加载。除了反射之外,在语言中没有办法做到这一点。

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

于 2018-10-22T18:27:23.703 回答
0

讨厌回答我自己的问题,如果有人知道更好的方法,我很乐意将其他人标记为正确的,但这是我现在想出的技巧,它似乎让我到达了我想去的地方。

val clazzName = this.getClass.getName
val clazz = Class.forName(clazzName.substring(0, clazzName.length - 1))
于 2014-06-28T20:55:46.930 回答