Вопрос-ответ

When should I use "this" in a class?

Когда я должен использовать "это" в классе?

Я знаю, что this относится к текущему объекту. Но я не знаю, когда мне действительно нужно это использовать. Например, будет ли какая-либо разница, если я использую x вместо this.x в некоторых методах? Может быть, x будет ссылаться на переменную, которая является локальной для рассматриваемого метода? Я имею в виду переменную, которая видна только в этом методе.

Как насчет this.method()? Могу ли я это использовать? Должен ли я это использовать. Если я просто использую method(), не будет ли это по умолчанию применено к текущему объекту?

Переведено автоматически
Ответ 1

Ключевое слово 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 используется, чтобы подчеркнуть тот факт, что на переменную экземпляра ссылаются (без необходимости устранения неоднозначности), но, на мой взгляд, это редкий случай.

Ответ 2

Второе важное использование this (помимо скрытия с помощью локальной переменной, как уже сказано во многих ответах) - это доступ к внешнему экземпляру из вложенного нестатического класса:

public class Outer {
protected int a;

public class Inner {
protected int a;

public int foo(){
return Outer.this.a;
}

public Outer getOuter(){
return Outer.this;
}
}
}
Ответ 3

Вам нужно использовать только this - и большинство людей используют это только тогда, - когда есть перекрывающаяся локальная переменная с тем же именем. (Например, методы Setter.)

Конечно, еще одна веская причина для использования this заключается в том, что это приводит к появлению intellisense в IDE :)

Ответ 4

Единственная необходимость использовать this. квалификатор - это когда другая переменная в текущей области видимости имеет то же имя, и вы хотите сослаться на элемент экземпляра (как описывает Уильям). Кроме этого, нет никакой разницы в поведении между x и this.x.

java oop