gpt4 book ai didi

scala - 如何向 Java 提供 Scala 伴随对象的类?

转载 作者:行者123 更新时间:2023-12-05 01:47:21 24 4
gpt4 key购买 nike

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

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

如何从 Scala 中为该函数提供 Scala 伴随对象的方法?

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

我觉得:

MyClass$.MODULE$.getClass()

应该是 answer .然而,MyClass$ 似乎在 scala 中缺失(至少在 2.10 中)并且仅对 Java 可见。

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

也失败了。

最佳答案

类名是 MyClass$(前面加上适当的包名)。

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

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

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

请注意,出于某种原因,这些在 repl 中都不起作用。您需要实际创建一个 .scala 文件,用 scalac 编译它,然后运行。

因此,在java中,使用MyClass$静态引用MyClass对象的类,使用MyClass$.MODULE$引用MyClass 对象的单例实例,使用MyClass$.classMyClass$.MODULE$.getClass() 来引用单例对象的类动态地,使用 Class.forName("MyClass$") 在运行时按名称访问它。

关于scala - 如何向 Java 提供 Scala 伴随对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27629215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com