Scala内部类键入-类型不匹配错误

时间:2019-10-28 05:41:03

标签: scala

运行以下代码时,我遇到一个非常奇怪的键入错误。

此代码的目标是拥有一个可以将此类的其他实例与其自身组合在一起的类,从而生成更新的实例。 (也许我应该更喜欢不变性并返回副本,但这是另一个讨论。)

在尝试运行代码之前,IntelliJ不会抱怨,然后它会因

而崩溃
  发现

类型不匹配:mic.MyInternalClass   必需:MyClass.this.MyInternalClass this.myVar =
  this.myVar.combine(mic.myVar)“

IntelliJ Error Message

class MyClass(s: String) {

  var myVar: MyInternalClass = new MyInternalClass(s)

  def combine(mic: MyClass): MyClass = {

    this.myVar = this.myVar.combine(mic.myVar)
    this
  }

  class MyInternalClass(s: String) {

    var myInternalVar: String = s

    def combine(mic: MyInternalClass): MyInternalClass = {
      this.myInternalVar += mic.myInternalVar
      this
    }
  }
}


object App {


  def main(args : Array[String]) {

    var mc1: MyClass = new MyClass("dog")
    var mc2: MyClass = new MyClass("cat")

    mc1.combine(mc2)

    println(mc1.myVar.myInternalVar)
    println(mc2.myVar.myInternalVar)
  }

}

2 个答案:

答案 0 :(得分:1)

在Scala中,每个实例的MyInternalClass被认为是单独的类型,因此不能混用thismic的{​​{1}}。如果这不是您想要的,最好将MyInternalClass声明移至伴随对象,而不是在各处使用MyClass#MyInternalClass

MyInternalClass

答案 1 :(得分:0)

我刚刚找到此链接:Referring to the type of an inner class in Scala

内部类方法似乎需要特殊的类型,例如:

def combine(mic: MyClass#MyInternalClass): MyInternalClass = {

仍在学习为什么会出现这种情况的细微差别。