【发布时间】:2011-09-06 19:37:10
【问题描述】:
在 Scala 中,是否可以使用反射来访问内部类的外部类?例如:
class A {
val inner = new {
println(getClass.getConstructors.toList)
println(getClass.getDeclaredFields.toList)
}
}
scala> val a = new A
List(public $line11.$read$$iw$$iw$A$$anon$1($line11.$read$$iw$$iw$A))
List()
a: A = A@45f76fc7
我认为 Scala 编译器在某处保存了对外部类的引用,但您可以在这里看到构造函数中打印的字段列表是空的。此外,构造函数似乎引用了外部类实例(但很难确定——我不确定这里到底发生了什么)。我还注意到在某些情况下有一个 $outer 字段似乎是我需要的,但它并不总是存在,我不明白这一点。
为什么???!!! 我有一个内部类,我需要创建一个使用反射的新实例。新实例是从现有实例复制的,并且需要具有相同的外部引用。
【问题讨论】:
标签: scala