У меня есть следующий код. Я хочу заполучить внешний объект класса, используя который я создал внутренний объект класса inner
. Как мне это сделать?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
РЕДАКТИРОВАТЬ: Ну, некоторые из вас, ребята, предложили изменить внутренний класс, добавив метод:
public OuterClass outer() {
return OuterClass.this;
}
Но что, если у меня нет контроля над изменением внутреннего класса, тогда (только для подтверждения) у нас есть какой-то другой способ получить соответствующий объект внешнего класса из объекта внутреннего класса?
источник
OuterClass.this
ссылается на внешний класс.источник
Вы можете (но не должны) использовать рефлексию для работы:
Конечно, имя неявной ссылки совершенно ненадежно, так что, как я уже сказал, вы не должны :-)
источник
Более общий ответ на этот вопрос касается теневых переменных и того, как они доступны.
В следующем примере (из Oracle) переменная x в main () является теневым для Test.x :
Запуск этой программы выведет:
Больше на: http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6
источник
Вот пример:
источник
если у вас нет контроля над изменением внутреннего класса, вам может помочь рефекция (но не рекомендуется). этот $ 0 является ссылкой во внутреннем классе, который сообщает, какой экземпляр класса Outer использовался для создания текущего экземпляра класса Inner.
источник
Конечно, имя неявной ссылки ненадежно, поэтому вы не должны использовать отражение для работы.
источник
Отредактировано в 2020-06-15
источник