Перейти к содержанию

Руководство по ключевому слову this в Java

В этом руководстве рассмотрим ключевое слово this в Java.

В Java ключевое слово this является ссылкой на текущий объект, метод которого вызывается.

Давайте рассмотрим, как и когда можно использовать это ключевое слово.

Устранение неоднозначности затенения полей

Ключевое слово this полезно для устранения неоднозначности переменных экземпляра из локальных параметров. Наиболее распространенная причина – когда есть параметры конструктора с тем же именем, что и поля экземпляра:

public class KeywordTest {

    private String name;
    private int age;
    
    public KeywordTest(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Мы используем this с полями экземпляра name и age, чтобы отличить их от параметров.

Другой вариант – использовать this с параметром, скрывающим или затеняющим в локальной области. Пример использования можно найти в статье «Сокрытие переменных и методов».

Ссылки на конструкторы одного класса

Из конструктора можно использовать this() для вызова другого конструктора того же класса. Здесь мы используем this() для цепочки конструкторов, чтобы уменьшить использование кода. Наиболее распространенный вариант использования – вызов конструктора по умолчанию из параметризованного конструктора:

public KeywordTest(String name, int age) {
    this();
    
    // остальная часть кода
}

Или можно вызвать параметризованный конструктор из конструктора без аргументов и передать некоторые аргументы:

public KeywordTest() {
    this("Иван", 27);
}

Обратите внимание, что this() должен быть первым оператором в конструкторе, иначе произойдет ошибка компиляции.

Передача this как параметра

Есть метод printInstance(), в котором определен аргумент thisKeyword:

public KeywordTest() {
    printInstance(this);
}

public void printInstance(KeywordTest thisKeyword) {
    System.out.println(thisKeyword);
}

Внутри конструктора вызываем метод printInstance(). При этом с помощью this передаем ссылку на текущий экземпляр.

Возврат this

Можно использовать ключевое слово this для возврата текущего экземпляра класса из метода.

Чтобы не дублировать код, рассмотрим полный практический пример того, как он реализован в шаблоне проектирования Builder.

Ключевое слово this во внутреннем классе

Мы также используем this для доступа к экземпляру внешнего класса из внутреннего класса:

public class KeywordTest {

    private String name;

    class ThisInnerClass {

        boolean isInnerClass = true;

        public ThisInnerClass() {
            KeywordTest thisKeyword = KeywordTest.this;
            String outerString = KeywordTest.this.name;
        }
    }
}

Здесь внутри конструктора можно получить ссылку на экземпляр KeywordTest с помощью вызова KeywordTest.this. Можно пойти еще дальше и получить доступ к переменным экземпляра, таким как поле KeywordTest.this.name.

Заключение

В этой статье мы рассмотрели ключевое слово this в Java.

Полный код доступен на Github.

Оригинал