В 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
, которое, кажется, мне нужно, но оно не всегда там, и я не понимаю этого.
ПОЧЕМУ ???!!! У меня есть внутренний класс, который мне нужен, чтобы создать новый экземпляр использования отражения.Новый экземпляр копируется из существующего экземпляра и должен иметь ту же внешнюю ссылку.