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

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

 

1. Вступление

В этом руководствеwe’ll take a look at the this Java keyword.

В Javathis keyword is a reference to the current object whose method is being called.

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

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

The keyword is useful for disambiguating instance variables from local parameters. Наиболее распространенная причина - когда у нас есть параметры конструктора с тем же именем, что и у полей экземпляра:

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 с параметром скрытия или теневого копирования в локальной области. Пример использования можно найти в статьеVariable and Method Hiding.

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

From a constructor, we can use this() to call a different constructor of the same class. Здесь мы используемthis() для цепочки конструкторов, чтобы уменьшить использование кода.

Наиболее распространенным вариантом использования является вызов конструктора по умолчанию из параметризованного конструктора:

public KeywordTest(String name, int age) {
    this();

    // the rest of the code
}

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

public KeywordTest() {
    this("John", 27);
}

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

4. Передачаthis в качестве параметра

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

public KeywordTest() {
    printInstance(this);
}

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

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

5. Возвращениеthis

We can also use this keyword to return the current class instance из метода.

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

6. Ключевое слово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 field.

7. Заключение

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

Как обычно, доступен полный кодover on Github.