powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Теория внутренних классов
12 сообщений из 12, страница 1 из 1
Теория внутренних классов
    #34085976
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Столкноулся с проблемой получения указателя на объект внешнего класса, имея указатель на внутренний класс:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 class  A {
   class  Inner{}
}

 public   class  Main {
   public   static   void  main (String[] args) {
    A.Inner i= new  A(). new  Inner();
    A a=i. ???
  }
}

Может кто знает.

С уважением Vector
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086123
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 class  A {
   class  Inner{
   A  public  getOuter{
      return  A. this ;
   }
 }
}

 public   class  Main {
   public   static   void  main (String[] args) {
    A.Inner i= new  A(). new  Inner();
    A a=i. ???
  }
}
На вскидку я думаю так можно. Но до конца не уверен.
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086135
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, что иначе нельзя.
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086203
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А без встраивания дополнительных фукций в Inner класс?
Преобразование ((A)i) не работает.
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086435
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VectorА без встраивания дополнительных фукций в Inner класс?
Преобразование ((A)i) не работает.
- и не должно, внутренний класс не является наследником от класа внешнего, это независимый класс. Собственно что делать Вам уже написал выше Leonidov:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public   class  A {
  A theA;
   public  A(){
    theA= this ;
  }
   public   class  Inner{
    A a=theA;
    ...
  }
}

 public   class  Main {
   public   static   void  main (String[] args) {
    A.Inner i= new  A(). new  Inner();
    A a=i.a;
  }
}
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086496
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа опа!
Код: plaintext
1.
2.
3.
4.
5.
        
Inner inner =  new  A(). new  Inner();
Field field = inner.getClass().getDeclaredField("this$0");
A a = (A) field.get(inner);
System.out.println(a);
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086581
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТипа опа!
- у меня не заработало :( Говорит:
Код: plaintext
1.
Class Main can not access a member of class A$Inner with modifiers "private final"
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34086604
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- у меня не заработало :( Говорит:
Код: plaintext
1.
Class Main can not access a member of class A$Inner with modifiers "private final"


А если field.setAccessible(true)?
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34088565
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так разве не работает? Без всяких там ваших извратов...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 class  A {
     class  Inner {
         public  A getOuter() {
             return  A. this ;
        }
    }
}

 class  Main {
     public   static   void  main(String[] args) {
        A.Inner i =  new  A(). new  Inner();
        A a = i.
    }
}
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34088623
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A a = A.this;
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34088629
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извращенцы.. :) А в JLS поглядеть?
...
Рейтинг: 0 / 0
Теория внутренних классов
    #34088818
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в JLS не смотрю, на фига. И недопрочитал вопрос. Один способ - завести во внутреннем классе поле со ссылкой на объект внешнего (в примере outer):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 public   class  A {
	 int  x =  1 ;
	
	 public   class  Inner  {
		 public   int  x =  2 ;
		 public  A outer = A. this ;
	}
}

Использование:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 public   class  Main {

	/**
	 * @param args
	 */
	 public   static   void  main(String[] args) {
		// TODO Auto-generated method stub
		A.Inner i =  new  A(). new  Inner();
		System.out.println ("Inner.x:" + i.x);
		
		System.out.println ("Outer.x:" + i.outer.x);
	}

}

Результат:

Код: plaintext
1.
2.
Inner.x:2
Outer.x:1
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Теория внутренних классов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]