如何获取Scala对象类型的classOf

69

我想知道如何在Scala中为对象类型获取一个类对象。由于"object"一词具有双重含义,因此这是一句话说得很满的问题。下面是一个将失败的示例:

object Main
{
   private [this] val TAG = classOf [Main].getName;
} // Main

如果 Main 是一个类,它就可以正常工作。有什么想法吗?

3个回答

97
scala> Main.getClass
res1: java.lang.Class[_] = class Main$

1
是的,我明白了,现在一切都清楚了。object只有一个实例,因此您要调用getClass。谢谢。 - Martin
7
实际上,我认为那是不正确的。object并没有任何实例,因为它们不是类型;它们是(编译器生成的)类的唯一实例,这就是为什么你可以调用getClass的原因。 - Alexey Romanov
5
有没有一种方式可以将这个内容作为编译时常量来处理,以便将其用作类型为Class的Java注解属性? - Markus Knecht
@MarkusKnecht 我不知道。你可能要将这个问题作为一个单独的问题来提出。 - Alexey Romanov

19
< p > classOf [Main] 不起作用的原因是Main不是类型

类和特质定义类型,对象不定义类型。


10

由于Main是一个对象,为了使您的示例能够工作,只需将赋值行替换为以下内容:

private [this] val TAG = this.getClass.getName;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接