我有一个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$") )
也失败了。
答案 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]