伴随对象的类



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

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))

相关内容

  • 没有找到相关文章

最新更新