Scala:如何在主方法中调用内部类的方法?
在Scala中调用内部类的方法
嘿,这个问题我之前也踩过坑~Scala里的内部类和Java的默认行为不太一样,它默认是路径依赖类型——也就是说每个OuterClass的实例都对应着属于自己的Inner类,不能像Java那样直接用OuterClass.Inner来创建实例,必须依托外部类的实例才行。
针对你给出的代码,我们可以这样修改main方法来调用innerMethod:
object main { def main(args: Array[String]): Unit = { println("Main") val pt = new OuterClass // 依托外部类实例pt,创建Inner类的实例 val innerInstance = new pt.Inner // 直接调用Inner类的innerMethod方法 innerInstance.innerMethod() // 如果需要触发InnerMost里的innerMethod调用,同样要依托Inner实例来创建InnerMost val _ = new innerInstance.InnerMost } }
补充说明:
如果你的业务场景不需要Inner类依赖OuterClass的实例,也可以把Inner类放到OuterClass的伴生对象里,这样它就变成了一个独立的嵌套类,不再绑定外部实例:
// 修改后的OuterClass定义 class OuterClass { } object OuterClass { class Inner { def innerMethod(): Unit = { println("innerMethod") } class InnerMost { innerMethod() } } } // 对应的main方法 object main { def main(args: Array[String]): Unit = { println("Main") // 直接通过伴生对象访问Inner类 val innerInstance = new OuterClass.Inner innerInstance.innerMethod() } }
这样两种方式都能实现你想要的调用效果,具体选哪种取决于你的业务是否需要内部类访问外部类的实例成员~
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

