Как использовать this как параметр java

Аватар пользователя Игорь Черкасов
Игорь Черкасов
02 декабря 2022

Ключевое слово this - это ссылка на текущий объект: объект, метод или конструктор которого вызывается (спецификация Oracle).

Поэтому, передавая this как параметр, мы фактически передаем ссылку на текущий объект. Рассмотрим на примере:


//Создадим простой класс ThisExample
public class ThisExample {

    private String message = "null";

//добавим конструктор с аргументом
    public ThisExample(String message) {
        this.message = message;
    }

}

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

Также можно использовать ссылки на конструкторы одного и того же класса.


public class ThisExample {

    public ThisExample() {
        System.out.println("Конструктор без аргументов");

    }

    public ThisExample(String message) {
        this();
        System.out.println("Конструктор с сообщением: " + message);

    }

}

Если мы создадим конструктор класса с аргументом, то сначала будет вызван конструктор без аргумента:


    public static void main(String[] args) {
        new ThisExample("this");

    }

Вывод будет следующим:

> Конструктор без аргументов
> Конструктор с сообщением: test

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


    private String message = "null";

    public ThisExample() {
        this("Test message");

    }

    public ThisExample(String message) {
        this.message = message;
    }

Можно передать this в качестве аргумента в метод:


   static class ThisExample {
        private String message = "null";

        public ThisExample() {
            printMessage(this);
        }

        public ThisExample(String message) {
            this.message = message;
            printMessage(this);
        }

        //метод, в который передаем this в качестве аргумента        
        public void printMessage(ThisExample msg) {
            System.out.println(msg);
        }

        //переопределим метод toString, для наглядности
        @Override
        public String toString() {
        return "message='" + message + '\'';
        }
    }

Запустим наш код:


    public static void main(String[] args) {
        new ThisExample();
        new ThisExample("this");

    }

Вывод будет следующим:

> message='null'
> message='this'
0 0