Scala:静态访问另一个类的类对象

时间:2014-06-13 17:05:00

标签: class scala reflection

我有两个班级“ClassA”和“ClassB”。我想从ClassA *中获取类对象,显然我不能这样做。

class ClassA {
  ClassB.getClass() // <-- won't compile
}
class ClassB {
}

唯一的方法是实例化特定的类并从新创建的对象中调用getClass()。但我真的不想为此创建一个新对象!

class ClassA {
  new ClassB().getClass() // <-- compiles, but I don't want to create a new object!
}
class ClassB {
}

在Java中,这是直截了当的。 Scala做同样的问题是什么?

*对于上下文,我最终希望获得ClassB的FQCN。

2 个答案:

答案 0 :(得分:5)

classOf[ClassB]将为您提供ClassB的Class对象。

答案 1 :(得分:3)

以下是工作示例:

class ClassA {
  val bClass = classOf[ClassB]
}
class ClassB {
}

object Main {

  def main(args: Array[String]): Unit = {
    println(new ClassA().bClass/*<- here you got java.lang.Class object*/.getName())
  }
}

Scala 2.11.1将ClassA编译为:

@ScalaSignature(bytes="...")
public class ClassA {
  private final Class<ClassB> bClass = ClassB.class;
  public Class<ClassB> bClass() { return this.bClass; }
}