如何向Java提供scala伴侣对象的类?

时间:2014-12-23 22:55:46

标签: scala static-methods scala-java-interop

我有一个Java代码,用于在类的静态方法中查找注释。

processor.readStatics( MyClass.class );  // Takes Class<?>

如何在scala中为此函数提供scala伴随对象的方法?

class MyClass {
}
object MyClass {
  def hello() { println("Hello (object)") } 
}

我好像:

MyClass$.MODULE$.getClass()

应该是answer。但是,scala中似乎缺少MyClass $(至少在2.10中)并且只对Java可见。

println( Class.forName("MyClass$.MODULE$") )

也失败了。

2 个答案:

答案 0 :(得分:2)

班级名称为MyClass$(前面带有相应的包名称)。

println(Class.forName("MyClass$"))将打印出“class MyClass $”。

MyClass$.MODULE$是类的实例,引用单例对象。

println(MyClass$.MODULE$ == MyClass)将打印出“true”,即使在编译时,您会收到一条警告:此比较总是产生错误:)

请注意,由于某些原因,这些都不适用于repl。您需要实际创建.scala文件,使用scalac编译它,然后运行。

因此,在java中,使用MyClass$静态引用MyClass对象的类,使用MyClass$.MODULE$引用MyClass对象的单例实例,使用{{1或MyClass$.class动态引用单例对象的类,使用MyClass$.MODULE$.getClass()在运行时按名称访问它。

答案 1 :(得分:1)

最短且类型最安全的解决方案是简单地使用

MyClass.getClass

我希望以下内容有效,但显然scalac对它不满意:

classOf[MyClass.type]