如何在Java中导入Scala嵌套Object并解决找不到符号错误?
在Java中调用Scala嵌套Object的方法
Scala的嵌套Object编译后生成的字节码结构和Java内部类不同,直接按Java的方式导入调用会报错,你可以按照以下方式处理:
正确的调用方式
导入语句
你可以选择导入外层Scala对象的编译类:
import scalapart.Outer$;
如果需要直接访问Inner对象的编译类,也可以导入:
import scalapart.Outer$Inner$;
调用代码
Scala的object编译后会生成一个包含MODULE$静态实例的类,嵌套对象的访问需要通过这个实例:
// 方式1:通过外层对象实例获取Inner并调用方法 String result = Outer$.MODULE$.Inner().method(); // 方式2:直接访问Inner的单例类调用方法 String result = Outer$Inner$.MODULE$.method();
背后的原理
- Scala的顶级
object会被编译为[对象名]$形式的类,其中MODULE$是该类的静态单例实例 - 嵌套的
object会编译为[外层对象名]$[内层对象名]$的内部类,同样通过MODULE$持有单例实例,同时外层对象的实例会生成Inner()方法用来桥接访问内部对象
内容的提问来源于stack exchange,提问作者David Nemeskey
相关产品推荐
相关产品推荐

