You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:24:58