运行以下代码时,我遇到一个非常奇怪的键入错误。
此代码的目标是拥有一个可以将此类的其他实例与其自身组合在一起的类,从而生成更新的实例。 (也许我应该更喜欢不变性并返回副本,但这是另一个讨论。)
在尝试运行代码之前,IntelliJ不会抱怨,然后它会因
而崩溃发现类型不匹配:mic.MyInternalClass 必需:MyClass.this.MyInternalClass this.myVar =
this.myVar.combine(mic.myVar)“
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)
}
}
答案 0 :(得分:1)
在Scala中,每个实例的MyInternalClass
被认为是单独的类型,因此不能混用this
和mic
的{{1}}。如果这不是您想要的,最好将MyInternalClass
声明移至伴随对象,而不是在各处使用MyClass#MyInternalClass
:
MyInternalClass
答案 1 :(得分:0)
我刚刚找到此链接:Referring to the type of an inner class in Scala
内部类方法似乎需要特殊的类型,例如:
def combine(mic: MyClass#MyInternalClass): MyInternalClass = {
仍在学习为什么会出现这种情况的细微差别。