我有一个班级,有多个方法和成员。当我创建这个类的实例时,我在第一个类中创建另一个类的实例。第二类中的一些方法需要知道第一个类的哪个实例正在运行。目前,我试图将“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"
}
}
答案 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
对象。你需要超出这个功能的东西吗?