Scala传递对此类的引用

时间:2011-09-24 21:25:00

标签: class scala

我有一个班级,有多个方法和成员。当我创建这个类的实例时,我在第一个类中创建另一个类的实例。第二类中的一些方法需要知道第一个类的哪个实例正在运行。目前,我试图将“this”传递给接受类型firstClass的参数。我究竟做错了什么?同样,我只是希望第二个类实例知道它属于哪个第一类实例,以便它可以从中调用公共方法和成员。

编辑:代码示例:

def main(args:Array[String]) : Unit = {
  val objectOne = new classOne
}

class classOne {
  val mutableBuffer = mutable.Buffer[String]
  val objectTwo = new classTwo

  objectTwo.doThis(this)
}

class classTwo {
  def doThis (exA:classOne) = {
    exA.mutableBuffer += "Adding text to a Buffer in object One"
  }
}

2 个答案:

答案 0 :(得分:4)

自我输入通常是最清洁的解决方案

class Bippy {
  outer =>
  ...
  class Bop {
    def demoMethod() = println(outer)
  }
  ...
}

<强>更新

示例代码更改了所有内容,这显然与内部类无关。我相信你的问题就在这一行:

val mutableBuffer = mutable.Buffer[String]

它没有按照您的想法进行,mutableBuffer现在指向mutable.Buffer单例,它实际上不是Buffer的实例

相反,请尝试以下两种方法之一:

val mutableBuffer = mutable.Buffer[String]()
//or
val mutableBuffer = mutable.Buffer.empty[String]

您还应该坚持使用大写字母启动类/单例/类型名称的约定,将示例代码转换为:

import collection.mutable.Buffer

def main(args:Array[String]) : Unit = {
  val one = new ClassOne()
}

class ClassOne {
  val mutableBuffer = Buffer.empty[String]
  val two = new ClassTwo()

  two.doThis(this)
}

class ClassTwo {
  def doThis(one: ClassOne) = {
    one.mutableBuffer += "Adding text to a Buffer in object One"
  }
}

答案 1 :(得分:2)

我必须对您的示例代码进行一些肤浅的更改才能使其运行:

import scala.collection.mutable

class classOne {
  val mutableBuffer : mutable.Buffer[String] = new mutable.ArrayBuffer[String]
  val objectTwo = new classTwo

  objectTwo.doThis(this)
}

class classTwo {
  def doThis (exA : classOne) = {
    exA.mutableBuffer += "Adding text to a Buffer in object One"
  }
}

val objectOne = new classOne
println(objectOne.mutableBuffer(0))

但它按预期工作。 classTwo对象能够修改classOne对象。你需要超出这个功能的东西吗?