Ключевое слово this
в основном используется в трех ситуациях. Первый и наиболее распространенный в методах setter для устранения неоднозначности ссылок на переменные. Во-вторых, когда необходимо передать текущий экземпляр класса в качестве аргумента методу другого объекта. Третий - это способ вызова альтернативных конструкторов из конструктора.
Дело 1: Использование this
для устранения неоднозначных ссылок. В методах настройки Java мы обычно передаем аргумент с тем же именем, что и переменная частного члена, которую мы пытаемся установить. Затем мы присваиваем аргумент x
this.x
. Это дает понять, что вы назначаете значение параметра «name» переменной экземпляра «name».
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
Случай 2: Использование this
в качестве аргумента, переданного другому объекту.
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
Случай 3: Использование this
для вызова альтернативных конструкторов. В комментариях trinithis правильно указал еще одно общее использование this
. Когда у вас есть несколько конструкторов для одного класса, вы можете использовать this(arg0, arg1, ...)
для вызова другого конструктора по вашему выбору, если вы делаете это в первой строке своего конструктора.
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
Я также видел this
используется, чтобы подчеркнуть тот факт, что переменная экземпляра на которую ссылаются (без необходимости существования неоднозначности), но это редкий случай, на моем взгляде.
+1 Заметим, что вы также можете передать _this_ в качестве аргумента. _this_ используется не только для устранения неоднозначности объема. –
Конечно, есть и 'this (arg1, arg2, ...)' внутри конструктора. –
Просто интересно, если добавить другие ответы на свои собственные, это обычная практика на SO? Кажется, это происходит достаточно часто. – Hazior