当我将外部对象声明为var
时,我无法实例化内部类。但当我将其作为val
时,我没有收到任何错误。为什么会这样?
class Outer(name : String ) { ter =>
class Iner(name : Inner) {
println("Printing outer class name : " + ter.name )
println("Printing inner class name : " + name )
}
}
object OverRiding extends App {
var outr : Outer = new Outer("Priyaranjan Outer")
var inner = new outr.Iner("Priyaranjan Inner")
}
答案 0 :(得分:3)
问题是在构造函数调用中,引用实例化类的表达式必须是稳定的标识符。这在http://www.scala-lang.org/files/archive/spec/2.11/05-classes-and-objects.html#constructor-invocations
的语言规范中是必需的如果您查看stable identifier的定义,您会看到为什么outr
必须是val
:
- p.x其中p是路径,x是p的稳定成员。稳定成员是由对象定义或非易失性类型的值定义引入的包或成员。