更改类中的变量

时间:2016-08-09 19:09:57

标签: scala

class B(i:Int) {
  var v = new M(i)
  class M(i: Int) {
    val x = i
    println("Creating a new M")
    println(s"x = $x")
  }
}


val b = new B(1)
val c = new B(2)
b.v = c.v

如何使用c.v更改b中的变量v,为什么我不能这样做?

1 个答案:

答案 0 :(得分:3)

您无法执行此类分配的原因是因为M不是静态的。与java不同,每个外部类实例都有自己的内部类,因此b.vc.v不同类型的实例,因此您无法进行简单的分配。

你可以做的是

  1. 使用companion-object
  2. 以scala方式声明M static
    object B {
      class M(i: Int) {
        val x = i
        println("Creating a new M")
        println(s"x = $x")
      }
    }
    
    class B(i:Int) {
      import B._
      var v = new B.M(i)
    }
    
    1. 使用类B
    2. 相同实例进行分配
      b.v = new b.M(2)
      

      您可以在scala-lang.org

      找到有关内部课程的更多信息