Что означает Class.this
Я знаю два случая когда используется ключевое слово this:
- когда вызываем нестатический метод на каком-нибудь объекте, то this неявно передается в параметр этого метода и возвращает ссылку на этот объект;
- когда мы хотим вызвать один конструктор из другого, здесь this тоже является ссылкой на объект который инициализируется в конструкторе;
Получается, что this - это ссылка на объект. Тогда у меня возникает вопрос, что означает эта запись:
Class.this
Что здесь может возвращать this, если в классе я не создавал никаких объектов. Чем здесь является this?
Ответы (2 шт):
Это контекст текущего объекта этого класса, т.е.:
package com.lampa;
public class Main {
public Main() {
new Thread(new Runnable() {
@Override
public void run() {
this.test(); // ошибка, т.к. this это Runnable
Main.this.test();
}
}).start();
}
private void test() {
System.out.println("test");
}
public static void main(String[] args) {
new Main();
}
}
Записи типа Class.this используются во вложенных или анонимных классах, когда из них нам нужно сослаться на объект включающего их класса. Class - имя внешнего (включающего) сласса, this - ссылка на экземпляр внешнего (включающего) класса. Если вы вложенном классе или анонимном классе обратитесь, просто по this, то вы сошлётесь на текущий объект этого вложенного или анонимного класса, а не на объект внешнего.