Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Теория внутренних классов / 12 сообщений из 12, страница 1 из 1
27.10.2006, 10:25:33
    #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
27.10.2006, 10:54:42
    #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
27.10.2006, 10:58:37
    #34086135
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теория внутренних классов
Не уверен, что иначе нельзя.
...
Рейтинг: 0 / 0
27.10.2006, 11:17:20
    #34086203
Vector
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теория внутренних классов
А без встраивания дополнительных фукций в Inner класс?
Преобразование ((A)i) не работает.
...
Рейтинг: 0 / 0
27.10.2006, 11:57:50
    #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
27.10.2006, 12:14:13
    #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
27.10.2006, 12:34:15
    #34086581
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теория внутренних классов
BlazkowiczТипа опа!
- у меня не заработало :( Говорит:
Код: plaintext
1.
Class Main can not access a member of class A$Inner with modifiers "private final"
...
Рейтинг: 0 / 0
27.10.2006, 12:39:10
    #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
28.10.2006, 12:47:22
    #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
28.10.2006, 14:32:36
    #34088623
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теория внутренних классов
A a = A.this;
...
Рейтинг: 0 / 0
28.10.2006, 14:52:08
    #34088629
mysterio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теория внутренних классов
Извращенцы.. :) А в JLS поглядеть?
...
Рейтинг: 0 / 0
28.10.2006, 20:24:24
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Теория внутренних классов / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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