Как использовать this как параметр java
Ключевое слово 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'