Что означает Class.this

Я знаю два случая когда используется ключевое слово this:

  1. когда вызываем нестатический метод на каком-нибудь объекте, то this неявно передается в параметр этого метода и возвращает ссылку на этот объект;
  2. когда мы хотим вызвать один конструктор из другого, здесь this тоже является ссылкой на объект который инициализируется в конструкторе;

Получается, что this - это ссылка на объект. Тогда у меня возникает вопрос, что означает эта запись:

Class.this

Что здесь может возвращать this, если в классе я не создавал никаких объектов. Чем здесь является this?


Ответы (2 шт):

Автор решения: lampa

Это контекст текущего объекта этого класса, т.е.:

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();
    }
}
→ Ссылка
Автор решения: nikoshi

Записи типа Class.this используются во вложенных или анонимных классах, когда из них нам нужно сослаться на объект включающего их класса. Class - имя внешнего (включающего) сласса, this - ссылка на экземпляр внешнего (включающего) класса. Если вы вложенном классе или анонимном классе обратитесь, просто по this, то вы сошлётесь на текущий объект этого вложенного или анонимного класса, а не на объект внешнего.

→ Ссылка