Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
1

Что означает this в данном контексте?

29.01.2015, 12:55. Показов 553. Ответов 10
Метки нет (Все метки)

Привет дорогие киберфорумцы.
Нашел код который меня поверг в замешательство.
Вот от окаянный:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package Commands;
 
public class BBBB {
 
    public void u(){
        G g = new G() {
            @Override
            public void t() {
                N n = new R();
                n.a(this);
            }
        };
    }
 
    //executor
    interface G{
        void t();
    }
 
    //command
    interface N{
        void a(G g);
    }
 
    class R implements N{
 
        @Override
        public void a(G g) {
 
        }
    }
}
У меня вопрос:
Что означает this в данном контексте? Я дебажил и this-ом был сам класс, но когда пишешь

Java
1
2
3
4
5
6
7
8
9
10
11
12
public void u(){
 
         BBBB bb = new BBBB();
 
        G g = new G() {
            @Override
            public void t() {
                N n = new R();
                n.a(bb);
            }
        };
    }
Получается ошибка компиляции

P.S. Простите что ОБЭКТ. Клавиша залипает
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2015, 12:55
Ответы с готовыми решениями:

Что значит слово freeze в контексте многопоточности
Иногда в умных (или псевдо-умных, трудно сказать) беседах про многопоточность встречается такое...

Что значит pipes в данном контексте?
ReadConsole reads keyboard input from a console's input buffer. It behaves like the ReadFile...

-1.#IND в выводе. Что означает в контексте вычислительной математики?
Добрый день, господа программисты! На паре по вычислительной математике преподаватель поставил...

что означает %k в данном случае?
#include <iostream> #include <conio.h> using namespace std; void main() { int i,j,k;...

10
172 / 130 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.01.2015, 14:37 2
Добавьте в функцию t() эту строчку. Она направит вас, куда вам нужно дальше.
Java
1
System.out.println(this.getClass().isAnonymousClass());
0
942 / 686 / 229
Регистрация: 28.04.2013
Сообщений: 1,924
29.01.2015, 14:41 3
Тангенс,
this в данном случае, ссылка не на объект класса new BBB, а на объект класса G. Смотрите внимательнее...

Java
1
2
3
4
5
6
7
G g = new G() {
            @Override
            public void t() {
                N n = new R();
                n.a(this);
            }
        };
0
172 / 130 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.01.2015, 14:48 4
reisal78, хочу вас огорчить: G - это интерфейс. Воспользуйтесь this.getClass().getName()
0
Эксперт Java
2377 / 2206 / 561
Регистрация: 28.12.2010
Сообщений: 8,626
29.01.2015, 15:10 5
Цитата Сообщение от Prorok2323 Посмотреть сообщение
reisal78, хочу вас огорчить: G - это интерфейс. Воспользуйтесь this.getClass().getName()
reisal78 прав. this в данном контексте это ссылка на класс, имплементирующий интерфейс G. В данном случае это анонимная имплементация

Не по теме:

За такие имена классов и композицию программы надо вешать

0
172 / 130 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.01.2015, 15:16 6
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
имплементирующий интерфейс G. В данном случае это R
R не имплементирует интерфейс G.
0
Эксперт Java
2377 / 2206 / 561
Регистрация: 28.12.2010
Сообщений: 8,626
29.01.2015, 15:17 7
Prorok2323, я поправил сообщение. Ошибся
0
172 / 130 / 74
Регистрация: 04.12.2013
Сообщений: 552
29.01.2015, 15:20 8
KEKCoGEN, не понимаю, что это за прикол с реализацией анонимного интерфейса. С классом понятно, но интерфейс...
0
Эксперт Java
2377 / 2206 / 561
Регистрация: 28.12.2010
Сообщений: 8,626
29.01.2015, 15:30 9
Prorok2323, если присмотретья в вывод this.getClass().getName() можно увидеть там BBBB$1 этот $1 означает иннер класс.
Пример можно переписать так:


Java
1
2
3
4
5
6
7
8
public class BBBB {
     
    public void u(){
       G g = new SomeImplementation();
       g.t();
    }
 
}
Java
1
2
3
4
5
6
7
8
public class SomeImplementation implements G{
 
    @Override
    public void t() {
        N n = new R();
        n.a(this);
    }
}
Java
1
2
3
4
5
6
7
class R implements N{
     
    @Override
    public void a(G g) {
        System.out.println("This " + g);
    }
}

Java
1
2
3
interface N{
    void a(G g);
}

Java
1
2
3
4
5
6
7
8
public class Main {
 
    public static void main(String[] args) {
        BBBB b = new BBBB();
        b.u();
 
    }
}
Добавлено через 26 секунд
Вывод программы

This org.cyberforum.exmaple.SomeImplementation@15db9742
1
reisal78
29.01.2015, 15:38
  #10

Не по теме:

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
За такие имена классов и композицию программы надо вешать
Да я тоже особо не вникал, глянул только в нужное место.

0
Эксперт Java
2377 / 2206 / 561
Регистрация: 28.12.2010
Сообщений: 8,626
29.01.2015, 15:44 11
Теперь если назвать классы по-человечески, можно понять зачем нужна вся эта конструкция.
Вот программа с осмысленными именами

Java
1
2
3
4
5
6
7
public class Main {
 
    public static void main(String[] args) {
           Executor executor = new RunCommandExecutor();
           executor.execute();
    }
}
Java
1
2
3
interface Executor{
    void execute();
}

Java
1
2
3
4
5
6
7
8
public class RunCommandExecutor implements Executor{
 
    @Override
    public void execute() {
        Command command = new RunCommand();
        command.run(this);
    }
}

Java
1
2
3
interface Command{
    void run(Executor g);
}

Java
1
2
3
4
5
6
7
class RunCommand implements Command{
     
    @Override
    public void run(Executor g) {
        System.out.println("Running run command. Context is: " + g);
    }
}

Становится ясно что ссылка this нужна для передачи контекста в комманду чтобы из комманды можно было понять кто её вызвал т.к это может влиять на логику выполнения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2015, 15:44

Что означает %k в данном случае?
#include <iostream> #include <conio.h> using namespace std; void main() { int i,j,k;...

Что означает выражение %= в данном коде
Что означает выражение %= в данном коде: Int32 first = 213; Second %= 256L; if (First !=...

Что означает pos ^= 1 в данном коде?
#include <stdio.h> #include <stdlib.h> #define FILE_NAME "numbers.txt" int...

Что в данном случае означает friend?
Всем доброй ночи! Помню, кода-то очень давно мельком видел, что кто-то уже спрашивал аналогичный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.